【问题标题】:How to stream file as download on Loopback 4?如何在 Loopback 4 上将文件作为下载流式传输?
【发布时间】:2019-08-02 00:00:52
【问题描述】:

我正在尝试创建一个系统,该系统将从另一个站点读取文件并将其作为文件下载提供给用户。 文件大小可能从 Mbs 到 Gbs 不等。

我已经使用 vanilla nodejs 创建了一个概念证明。

const app = express();
app.get('/', (req, res) => { 
    res.setHeader('Content-disposition', 'attachment; filename=FILENAME');
    res.setHeader('Content-type', 'application/octet-stream');

    http.get('URL_TO_FILE', data => {
        data.pipe(res);
    });
});

我想使用环回 4 来执行此操作。这可能吗?谢谢!

【问题讨论】:

    标签: node.js loopbackjs loopback4


    【解决方案1】:

    您可以使用nodejs request 并使用环回 4 控制器轻松完成此操作。 你需要导入这个包:

    var request = require('request');
    var fs = require('fs');
    

    并将这段代码放在端点方法中:

    @get('/getImage')
    async retrieveImage(): Promise<any> {
      let file = fs.createWriteStream(__dirname + `/file.jpg`);
      console.log('the file is here: ' + file.path);
    
      return await new Promise((resolve, reject) => {
        request({
          url: 'URL_TO_FILE',
          headers: {
            'Content-disposition': 'attachment; filename=FILENAME',
            'Content-type': 'application/octet-stream',
          },
          gzip: true,
        })
        .pipe(file)
        .on('finish', () => {
          console.log(`The file is finished downloading.`);
          resolve();
        })
        .on('error', (error: any) => {
            reject(error);
        })
      }).catch(error => {
        console.log(`something happened: ${error}`)
      }); 
    }
    

    从这里你需要去这个网址:

    http://localhost:3000/getImage

    该文件将位于您的控制器文件夹中,名称为“file.jpg”。

    【讨论】:

    • 此解决方案是将远程文件下载到服务器。不是我真正需要的。我需要的是服务器来下载文件并将其作为文件流提供。我已经通过解决方法解决了上面的问题。我修改了我的环回序列以能够提供文件流。如果有人有兴趣,请打我。将详细说明。
    • @ProNoob 为什么不通过回答您自己的问题来详细说明?要求寻找答案的人与您联系以获得答案,这违背了 SO 的目的。是的,我对答案很感兴趣。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多