From 1562f907d0e1a1178e69c63919c16b0253ccfbff Mon Sep 17 00:00:00 2001 From: abersheeran Date: Mon, 18 Dec 2023 14:34:48 +0800 Subject: [PATCH] Refactor handle_delete and handle_mkcol functions --- src/index.ts | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 0d05da6..3449495 100644 --- a/src/index.ts +++ b/src/index.ts @@ -207,6 +207,23 @@ async function handle_delete(request: Request, bucket: R2Bucket): Promise object.key); + if (keys.length > 0) { + await bucket.delete(keys); + } + + if (r2_objects.truncated) { + cursor = r2_objects.cursor; + } + } while (r2_objects.truncated); + + return new Response(null, { status: 204 }); + } + let resource = await bucket.head(resource_path); if (resource === null) { return new Response('Not Found', { status: 404 }); @@ -236,16 +253,16 @@ async function handle_delete(request: Request, bucket: R2Bucket): Promise { - let resource_path = make_resource_path(request); - if (request.body) { return new Response('Unsupported Media Type', { status: 415 }); } + let resource_path = make_resource_path(request); resource_path = resource_path.endsWith('/') ? resource_path.slice(0, -1) : resource_path; // Check if the resource already exists - if (await bucket.head(resource_path)) { + let resource = await bucket.head(resource_path); + if (resource !== null) { return new Response('Method Not Allowed', { status: 405 }); } @@ -491,7 +508,7 @@ async function handle_copy(request: Request, bucket: R2Bucket): Promise'; + let is_dir = resource?.customMetadata?.resourcetype === ''; if (is_dir) { let depth = request.headers.get('Depth') ?? 'infinity'; @@ -500,6 +517,7 @@ async function handle_copy(request: Request, bucket: R2Bucket): Promise { let target = destination + "/" + object.key.slice(prefix.length); + target = target.endsWith("/") ? target.slice(0, -1) : target; let src = await bucket.get(object.key); if (src !== null) { await bucket.put(target, src.body, {