0

我正在尝试创建一个系统,该系统将从另一个站点读取文件并将其作为文件下载提供给用户。文件大小可能从 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 来做到这一点。这可能吗?谢谢!

4

1 回答 1

0

您可以使用nodejs 请求和使用 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”。

于 2019-09-06T17:13:27.997 回答