【问题标题】:Node Js How to download file into memory without writing the file to the system or without creating the file in a directoryNode Js如何在不将文件写入系统或不在目录中创建文件的情况下将文件下载到内存中
【发布时间】: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


【解决方案1】:

您可以直接将请求流通过管道传输到 gridfs 写入流:

 const fileStorage = gfs.createWriteStream({ filename: dest });

 request.get(url)
        .on('error', function (err) { console.log(err) })
        .pipe(fileStorage)
        .on('close', callback);

【讨论】:

  • 所以我会从下载中删除 tr,文件名(
  • 你必须通过流的文件名
  • 能否请您花时间研究显示的代码并至少部分理解它,然后一次问一个问题。请不要用 cmets 向我发送垃圾邮件。谢谢你。当然这不是一个完成的实现,它是为了给你一个基本的想法
  • @JonasWilms 先生,我已经让它工作了,谢谢你的想法
  • 很高兴为您提供帮助:)
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2018-08-09
  • 2019-03-22
相关资源
最近更新 更多