From f8c25a23c19a660e34d4ffe9f4b0d04f5d20c7b1 Mon Sep 17 00:00:00 2001 From: abersheeran Date: Wed, 6 Dec 2023 09:43:25 +0800 Subject: [PATCH] Fix resourcetype assignment in fromR2Object function --- src/index.ts | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/src/index.ts b/src/index.ts index d359eb9..debd41d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -74,7 +74,7 @@ function fromR2Object(object: R2Object | null | undefined): DavProperties { getcontenttype: object.httpMetadata?.contentType, getetag: object.etag, getlastmodified: object.uploaded.toUTCString(), - resourcetype: object.key.endsWith('/') ? '' : '', + resourcetype: object.customMetadata?.resourcetype ?? '', }; } @@ -111,12 +111,13 @@ export default { let r2_objects = await bucket.list({ prefix: resource_path, delimiter: '/', + include: ['httpMetadata', 'customMetadata'], }); let page = ''; - for (let dirname of r2_objects.delimitedPrefixes) { - page += `${dirname}
`; - } - for (let object of r2_objects.objects.filter(object => !object.key.endsWith('/'))) { + // for (let dirname of r2_objects.delimitedPrefixes) { + // page += `${dirname}
`; + // } + for (let object of r2_objects.objects) { page += `${object.httpMetadata?.contentDisposition ?? object.key}
`; } response = new Response(page, { status: 200, headers: { 'Content-Type': 'text/html' } }); @@ -203,7 +204,7 @@ export default { break; } - resource_path = resource_path.endsWith('/') ? resource_path : resource_path + '/'; + resource_path = resource_path.endsWith('/') ? resource_path.slice(0, -1) : resource_path; // Check if the resource already exists if (await bucket.head(resource_path)) { @@ -212,14 +213,17 @@ export default { } // Check if the parent directory exists - let parent_dir = resource_path.split('/').slice(0, -2).join("/") + '/'; + let parent_dir = resource_path.split('/').slice(0, -2).join("/"); - if (parent_dir !== '/' && !await bucket.head(parent_dir)) { + if (parent_dir !== '' && !await bucket.head(parent_dir)) { response = new Response('Conflict', { status: 409 }); break; } - await bucket.put(resource_path, new Uint8Array(), { httpMetadata: request.headers }); + await bucket.put(resource_path, new Uint8Array(), { + httpMetadata: request.headers, + customMetadata: { resourcetype: '' } + }); response = new Response('', { status: 201 }); } break; @@ -289,22 +293,23 @@ export default { prefix: resource_path, delimiter: '/', cursor: cursor, + include: ['httpMetadata', 'customMetadata'], }); - for (let dirname of r2_objects.delimitedPrefixes) { - page += ` - - ${dirname} - - - - - HTTP/1.1 200 OK - - `; - } + // for (let dirname of r2_objects.delimitedPrefixes) { + // page += ` + // + // ${dirname} + // + // + // + // + // HTTP/1.1 200 OK + // + // `; + // } - for (let object of r2_objects.objects.filter(object => !object.key.endsWith('/'))) { + for (let object of r2_objects.objects) { page += ` ${object.key}