【发布时间】:2019-09-27 14:44:25
【问题描述】:
我的程序中有一个功能,我将所有文件从服务器下载到我的目录,然后在下载后获取这些文件的路径以及名称和数据,并使用 mongo grid fs.but 存储到 mongo 数据库中我有一个问题,我下载文件然后获取文件数据并将其存储到 mongo db 并不是多余的。有没有办法我们可以在节点 js 中下载文件而不将其写入磁盘或目录,但我们仍然可以获得文件数据?这样我仍然可以将这些文件存储在 mongo 中,而无需在我的目录中创建这些文件,例如将其存储到内存中?完成后被删除。
我想实现这一点的原因是我不再需要在将这些文件存储到 mongo 后删除正在下载到我的目录的文件。
下载文件的示例代码。
var download = function (url, dest, callback) {
request.get(url)
.on('error', function (err) { console.log(err) })
.pipe(fs.createWriteStream(dest))
.on('close', callback);
};
final_list.forEach(function (str) {
var filename = str.split('/').pop();
console.log('Downloading ' + filename);
download(str, filename, function () { console.log('Finished Downloading' + "" + filename) });
});
mongo 存储代码
var tempfile = dest;
var origname = filename;
var writestream = gfs.createWriteStream({ filename: origname });
console.log('Finished Downloading' + " " + filename);
fs.createReadStream(tempfile)
.on('end', function () {
})
.on('error', function () {
})
.pipe(writestream);
【问题讨论】:
-
当然,与读取文件并将其写入磁盘的方式相同,只需省略要写入磁盘的位置,然后将其缓冲。您需要创建一个集合来存储您的文件,这很简单。
-
将文件移动到 MongoDB 的代码在哪里?
-
@JonasWilms 我认为不再需要发布先生了
-
@SPlatten 先生,您能发表答案吗?根据我上面的代码,谢谢。
-
@JonasWilms 我已经更新了问题先生
标签: javascript node.js mongodb mongoose