【发布时间】:2018-02-01 04:03:17
【问题描述】:
您好我正在尝试上传多个文件,文件写入是正确的。但我想将文件移动到 mongo 网格 fs 中,第一个文件只是正确移动文件的其余部分没有移动到网格 fs 中,也没有取消链接。
这是我的代码:
for (var i = 0; i < files.length; i++) {
(function(i) {
var singleFile = files[i];
var fileData = JSON.parse(files[i].name);
var fileName = fileData.fileName;
var fileType = files[i].type;
var uniqId = fileData.attachmentId;
var targetPath = "./attachments/" + uniqId;
var tmp_path = files[i].path;
console.log("uniqId : " + uniqId);
//uploadFile(tmp_path,targetPath,fileName,uniqId,fileType);
fs.readFile(tmp_path, function(err, data) {
fs.writeFile(targetPath, data, function(err) {
if (!err) {
mongoose.connect(configSettings.mongodb.ip, configSettings.mongodb.databasename, configSettings.mongodb.port, function(err, succ) {
var id = new ObjectID(uniqId);
new GridStore(mongoose.connection.db, id, fileName, 'w', {
'content_type': 'application/octet-stream'
}).open(function(err, gs) {
gs.writeFile(targetPath, function(err) {
if (err) {
console.log("err");
}
gs.close(function(err) {
console.log("success");
fs.unlink("./attachments/" + uniqId, function(err) {
console.log("err : " + err);
console.log(uniqId + ' ::successfully deleted ');
});
mongoose.connection.close();
});
});
});
});
}
});
});
})(i);
}
res.send("success");
我尝试过使用闭包函数,即使我也尝试过创建单独的函数,但结果相同(仅插入和取消链接一个文件)。
在这种情况下,我必须做什么才能将所有文件存储在 gridfs 中并从临时文件夹中取消链接?
【问题讨论】:
-
mongodb 是否支持所有这些并发打开和关闭?不应该先建立与mongobd的连接并打开网格,然后在这个打开成功函数中,放置循环以启动所有文件处理吗?
标签: javascript node.js mongodb express gridfs