如何在Loopback 4上流式下载文件?

时间:2019-08-02 00:00:52

标签: node.js loopbackjs loopback4

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

我已经使用香草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做到这一点。这可能吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用nodejs request并使用Loopback 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”名称保存在您的控制器文件夹中。