Allow PUT to overwrite existing files

This commit is contained in:
Zaid Abdulla committed 2019-12-16 16:05:43 -08:00
1 parent 1e6bb5f450
commit ce955e34c1
2 files changed
+29 -10

No files matched your search

+23 -10
View File
@@ -565,22 +565,35 @@ export function listener(request, response): void {
version: request.headers.version version: request.headers.version
}; };
const bucket = new mongodb.GridFSBucket(db.client.db()); const bucket = new mongodb.GridFSBucket(db.client.db());
const uploadStream = bucket.openUploadStreamWithId(filename, filename, { bucket.delete((filename as unknown) as mongodb.ObjectId, () => {
metadata: metadata const uploadStream = bucket.openUploadStreamWithId(
}); filename,
filename,
{
metadata: metadata
}
);
uploadStream.on("error", err => { uploadStream.on("error", err => {
throwError(err, response); throwError(err, response);
}); });
uploadStream.end(body, () => { uploadStream.end(body, () => {
response.writeHead(201); response.writeHead(201);
response.end(); response.end();
});
}); });
} else if (request.method === "DELETE") { } else if (request.method === "DELETE") {
const bucket = new mongodb.GridFSBucket(db.client.db()); const bucket = new mongodb.GridFSBucket(db.client.db());
bucket.delete((filename as unknown) as mongodb.ObjectId, err => { bucket.delete((filename as unknown) as mongodb.ObjectId, err => {
if (err) return void throwError(err, response); if (err) {
if (err.message.startsWith("FileNotFound")) {
response.writeHead(404);
response.end("404 Not Found");
return;
}
return void throwError(err, response);
}
response.writeHead(200); response.writeHead(200);
response.end(); response.end();
+6
View File
@@ -455,6 +455,12 @@ router.put("/files/:id", async (ctx, next) => {
return void (ctx.status = 403); return void (ctx.status = 403);
} }
try {
await db.deleteFile(id);
} catch (err) {
// File doesn't exist, ignore
}
await db.putFile(id, metadata, ctx.req); await db.putFile(id, metadata, ctx.req);
log.metadata = metadata; log.metadata = metadata;
logger.accessInfo(log); logger.accessInfo(log);