Node Js如何将文件下载到内存中而不将文件写入系统或不在目录中创建文件
我程序中有一个功能,其中我将所有文件从服务器下载到我的目录中,然后在下载并使用mongo grid fs存储到mongo数据库中后获得这些文件的路径以及名称和数据。但是我有一个问题是我下载文件然后将文件数据ang存储到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);
回答如下:您可以直接将请求流通过管道传递到gridfs写入流: const fileStorage = gfs.createWriteStream({ filename: dest });
request.get(url)
.on('error', function (err) { console.log(err) })
.pipe(fileStorage)
.on('close', callback);
Node Js如何将文件下载到内存中而不将文件写入系统或不在目录中创建文件
我程序中有一个功能,其中我将所有文件从服务器下载到我的目录中,然后在下载并使用mongo grid fs存储到mongo数据库中后获得这些文件的路径以及名称和数据。但是我有一个问题是我下载文件然后将文件数据ang存储到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);
回答如下:您可以直接将请求流通过管道传递到gridfs写入流: const fileStorage = gfs.createWriteStream({ filename: dest });
request.get(url)
.on('error', function (err) { console.log(err) })
.pipe(fileStorage)
.on('close', callback);