Initial commit

This commit is contained in:
wfz
2026-05-13 16:24:00 +08:00
commit 5728d3cbda
55 changed files with 37267 additions and 0 deletions

72
functions/api/fs/list.ts Normal file
View File

@@ -0,0 +1,72 @@
interface Env {
R2_BUCKET: R2Bucket;
}
export async function onRequest(context: { env: Env; request: Request }) {
const url = new URL(context.request.url);
if (url.pathname === '/api/fs/list' && context.request.method === 'POST') {
try {
const files: any[] = [];
let cursor: string | undefined;
do {
const listing = await context.env.R2_BUCKET.list({
cursor: cursor,
limit: 1000
});
for (const obj of listing.objects) {
if (obj.key.endsWith('.mp4') && !obj.key.includes('/')) {
const nameWithoutExt = obj.key.replace('.mp4', '');
files.push({
name: obj.key,
size: obj.size,
modified: obj.lastModified,
thumb: `https://pub-7d4a6640bc77480c99842eea19bb2b69.r2.dev/thumbs/${nameWithoutExt}.jpg`
});
}
}
cursor = listing.cursor;
} while (cursor);
const response = {
code: 200,
message: "success",
data: {
content: files.map((f, i) => ({
id: `r2_${i}`,
path: "",
name: f.name,
size: f.size,
is_dir: false,
modified: f.modified,
created: f.modified,
sign: "",
thumb: f.thumb,
type: 2,
hashinfo: "null",
hash_info: null
})),
total: files.length,
readme: "",
header: "",
write: false,
provider: "r2"
}
};
return new Response(JSON.stringify(response), {
headers: { 'Content-Type': 'application/json' }
});
} catch (e) {
return new Response(JSON.stringify({ error: e.message }), {
status: 500,
headers: { 'Content-Type': 'application/json' }
});
}
}
return new Response('Not Found', { status: 404 });
}