-1

在此处输入图像描述大家好,所以我试图在 nodejs 中提出这种类型的请求。我假设您可以使用 multer 来完成,但有一个主要问题我不想下载文件或从表单上传它我想直接从 s3 中提取它,获取对象并将其作为文件与其他数据到我的路线。有可能这样做吗?

4

2 回答 2

0

是的,这是完全可能的。假设您了解aws-sdk.

示例:(辅助方法)

    getDataFromS3(filename, bucket, callback) {

      var params = {
      Bucket: bucket, 
      Key: filename
     };

     s3.getObject(params, function(err, data) {
       if (err) {
           callback(true, err.stack); // an error occurred
       }
       else  {
          callback(false, data);     //success in retrieving data.
       }  
   });

 }

您的路线

app.post('/something', (req, res) => {
    var s3Object = getDataFromS3('filename', 'bucket', (err, file) => {
        if(err) {
            return res.json({ message: 'File retrieval failed' });
         }

        var routeProperties = {};
        routeProperties.file = file;
        routeProperties.someOtherdata = req.body.someOtherData;

        return res.json({routeProperties});
    });
});

当然,代码可能并不完全正确。但这是一种你可以用来得到你想要的东西的方法。希望这可以帮助。

于 2019-08-19T14:16:26.227 回答
0

我在这里看到两种方法,您可以:

  • 通过管道将此请求传递给用户,这意味着您仍然下载并传递它,但您不会将其保存在任何地方,只需通过您的后端流式传输即可。

这里有一个非常相似的问题:Streaming file from S3 with Express,包括有关长度和文件类型的信息

我只是要复制和粘贴代码片段,仅供参考如何完成

function sendResponseStream(req, res){
  const s3 = new AWS.S3();
  s3.getObject({Bucket: myBucket, Key: myFile})
    .createReadStream()
    .pipe(res);
}
于 2019-08-19T14:12:38.417 回答