From 66054ba0624003a4d68c02fb98791ca91bc0ea1e Mon Sep 17 00:00:00 2001 From: abersheeran Date: Wed, 6 Dec 2023 15:41:36 +0800 Subject: [PATCH] Fix resource path handling in fuck windows --- src/index.ts | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/src/index.ts b/src/index.ts index 8646bd8..e461b24 100644 --- a/src/index.ts +++ b/src/index.ts @@ -281,34 +281,39 @@ export default { break; } - let object = await bucket.get(resource_path); - if (object === null && !resource_path.endsWith('/')) { + let object = await bucket.head(resource_path); + if (object === null && resource_path.endsWith('/')) { + object = await bucket.head(resource_path.slice(0, -1)); + } + + if (object === null) { response = new Response('Not Found', { status: 404 }); - } else { - let page = ` + break; + } + + let page = ` /${resource_path} ${Object.entries(fromR2Object(object)) - .filter(([_, value]) => value !== undefined) - .map(([key, value]) => `<${key}>${value}`) - .join('\n') - } + .filter(([_, value]) => value !== undefined) + .map(([key, value]) => `<${key}>${value}`) + .join('\n') + } HTTP/1.1 200 OK `; - response = new Response(page, { - status: 207, - headers: { - 'Content-Type': 'text/xml', - }, - }); - } + response = new Response(page, { + status: 207, + headers: { + 'Content-Type': 'text/xml', + }, + }); } break; case '1': { @@ -324,6 +329,18 @@ export default { include: ['httpMetadata', 'customMetadata'], }); + if (r2_objects.objects.length === 1) { + let object = r2_objects.objects[0]; + // When the resource is a collection + if (object.key === resource_path && object.customMetadata?.resourcetype === '') { + resource_path = resource_path.endsWith('/') ? resource_path : resource_path + '/'; + if (r2_objects.truncated) { + delete r2_objects.cursor + } + r2_objects.truncated = true; + } + } + for (let object of r2_objects.objects.filter(object => object.key !== resource_path)) { page += `