Skip to content

Commit 1186de5

Browse files
committed
fix: save multiple objects in GridFS and download binaries
1 parent b16e35f commit 1186de5

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

index.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -338,17 +338,16 @@ app.put("/api/experiments/:id/files", upload.array("_files"), function(req, res,
338338
delete req.body._id; // Delete ID (will not update otherwise)
339339
var filesP = Array(req.files.length);
340340

341-
for (var i = 0; i < req.files.length; i++) {
342-
var file = req.files[i];
341+
var saveGFSFile = function(fileObj) {
343342
var fileId = new db.ObjectID(); // Create file ID
344343
// Open new file
345-
var gfs = new db.GridStore(db, fileId, file.originalname, "w", {content_type: file.mimetype, promiseLibrary: Promise});
344+
var gfs = new db.GridStore(db, fileId, fileObj.originalname, "w", {content_type: fileObj.mimetype, promiseLibrary: Promise});
346345
gfs.open(function(err, gfs) {
347346
if (err) {
348347
console.log(err);
349348
} else {
350349
// Write from buffer and flush to db
351-
gfs.write(file.buffer, true)
350+
gfs.write(fileObj.buffer, true)
352351
.then(function(gfs) {
353352
// Save file reference
354353
filesP[i] = db.experiments.updateByIdAsync(req.params.id, {$push: {_files: {_id: gfs.fileId, filename: gfs.filename}}});
@@ -358,6 +357,10 @@ app.put("/api/experiments/:id/files", upload.array("_files"), function(req, res,
358357
});
359358
}
360359
});
360+
};
361+
362+
for (var i = 0; i < req.files.length; i++) {
363+
saveGFSFile(req.files[i]); // Save file in function closure
361364
}
362365

363366
// Check file promises
@@ -481,7 +484,7 @@ app.get("/files/:id", function(req, res, next) {
481484
.then(function(file) {
482485
res.setHeader("Content-Disposition", "attachment; filename=" + gfs.filename); // Set as download
483486
res.setHeader("Content-Type", gfs.contentType); // MIME Type
484-
res.send(file.toString()); // Send file
487+
res.send(file); // Send file
485488
})
486489
.catch(function(err) {
487490
next(err);

0 commit comments

Comments
 (0)