Fix resourcetype assignment in fromR2Object
function
This commit is contained in:
parent
337a952e81
commit
f8c25a23c1
49
src/index.ts
49
src/index.ts
@ -74,7 +74,7 @@ function fromR2Object(object: R2Object | null | undefined): DavProperties {
|
|||||||
getcontenttype: object.httpMetadata?.contentType,
|
getcontenttype: object.httpMetadata?.contentType,
|
||||||
getetag: object.etag,
|
getetag: object.etag,
|
||||||
getlastmodified: object.uploaded.toUTCString(),
|
getlastmodified: object.uploaded.toUTCString(),
|
||||||
resourcetype: object.key.endsWith('/') ? '<collection />' : '',
|
resourcetype: object.customMetadata?.resourcetype ?? '',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,12 +111,13 @@ export default {
|
|||||||
let r2_objects = await bucket.list({
|
let r2_objects = await bucket.list({
|
||||||
prefix: resource_path,
|
prefix: resource_path,
|
||||||
delimiter: '/',
|
delimiter: '/',
|
||||||
|
include: ['httpMetadata', 'customMetadata'],
|
||||||
});
|
});
|
||||||
let page = '';
|
let page = '';
|
||||||
for (let dirname of r2_objects.delimitedPrefixes) {
|
// for (let dirname of r2_objects.delimitedPrefixes) {
|
||||||
page += `<a href="${dirname}">${dirname}</a><br>`;
|
// page += `<a href="${dirname}">${dirname}</a><br>`;
|
||||||
}
|
// }
|
||||||
for (let object of r2_objects.objects.filter(object => !object.key.endsWith('/'))) {
|
for (let object of r2_objects.objects) {
|
||||||
page += `<a href="${object.key}">${object.httpMetadata?.contentDisposition ?? object.key}</a><br>`;
|
page += `<a href="${object.key}">${object.httpMetadata?.contentDisposition ?? object.key}</a><br>`;
|
||||||
}
|
}
|
||||||
response = new Response(page, { status: 200, headers: { 'Content-Type': 'text/html' } });
|
response = new Response(page, { status: 200, headers: { 'Content-Type': 'text/html' } });
|
||||||
@ -203,7 +204,7 @@ export default {
|
|||||||
break;
|
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
|
// Check if the resource already exists
|
||||||
if (await bucket.head(resource_path)) {
|
if (await bucket.head(resource_path)) {
|
||||||
@ -212,14 +213,17 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the parent directory exists
|
// 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 });
|
response = new Response('Conflict', { status: 409 });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
await bucket.put(resource_path, new Uint8Array(), { httpMetadata: request.headers });
|
await bucket.put(resource_path, new Uint8Array(), {
|
||||||
|
httpMetadata: request.headers,
|
||||||
|
customMetadata: { resourcetype: '<collection />' }
|
||||||
|
});
|
||||||
response = new Response('', { status: 201 });
|
response = new Response('', { status: 201 });
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -289,22 +293,23 @@ export default {
|
|||||||
prefix: resource_path,
|
prefix: resource_path,
|
||||||
delimiter: '/',
|
delimiter: '/',
|
||||||
cursor: cursor,
|
cursor: cursor,
|
||||||
|
include: ['httpMetadata', 'customMetadata'],
|
||||||
});
|
});
|
||||||
|
|
||||||
for (let dirname of r2_objects.delimitedPrefixes) {
|
// for (let dirname of r2_objects.delimitedPrefixes) {
|
||||||
page += `
|
// page += `
|
||||||
<response>
|
// <response>
|
||||||
<href>${dirname}</href>
|
// <href>${dirname}</href>
|
||||||
<propstat>
|
// <propstat>
|
||||||
<prop>
|
// <prop>
|
||||||
<resourcetype><collection /></resourcetype>
|
// <resourcetype><collection /></resourcetype>
|
||||||
</prop>
|
// </prop>
|
||||||
<status>HTTP/1.1 200 OK</status>
|
// <status>HTTP/1.1 200 OK</status>
|
||||||
</propstat>
|
// </propstat>
|
||||||
</response>`;
|
// </response>`;
|
||||||
}
|
// }
|
||||||
|
|
||||||
for (let object of r2_objects.objects.filter(object => !object.key.endsWith('/'))) {
|
for (let object of r2_objects.objects) {
|
||||||
page += `
|
page += `
|
||||||
<response>
|
<response>
|
||||||
<href>${object.key}</href>
|
<href>${object.key}</href>
|
||||||
|
Loading…
Reference in New Issue
Block a user