Allow PUT to overwrite existing files
This commit is contained in:
1 parent
1e6bb5f450
commit
ce955e34c1
2 files changed
+29
-10
No files matched your search
+23
-10
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in new issue
Block a user