【问题标题】:How do I make a form-data request in node pulling the files from s3如何在节点中发出表单数据请求,从 s3 中提取文件
【发布时间】:2019-08-20 20:33:53
【问题描述】:

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

【问题讨论】:

    标签: node.js amazon-s3 multer


    【解决方案1】:

    是的,这完全有可能。假设您知道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});
        });
    });
    

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

    【讨论】:

    • 我可以把它放在异步等待中吗?一旦我得到数据,我如何从路由中实际发送它
    • 是的,您可以将其转换为返回一个承诺而不是一个回调函数。但这完全是另一回事。在路由中执行此函数后,在函数的回调中,您可以获取代码中提到的数据。如果在获取时出错则返回错误 else 创建一个空对象,将您的属性附加到该对象并使用 res.json({ routeProperties }) 将对象作为路由的响应发送。
    • 你能给我一个例子,说明你将如何获取文件,然后以邮递员路线图片中显示的格式通过邮递路线发送
    • 哇,不。我已经向您展示了方法,其余的取决于您。这是您可以学习的唯一方法。 Stackoverlow 是一个社区,他们可以向您展示一种方法,而不是为您编写整个代码。
    【解决方案2】:

    我在这里看到了两种方式,你可以:

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

    这里有一个非常相似的问题:Streaming file from S3 with Express including information on length and filetype

    我只是复制和粘贴代码 sn-p 仅供参考如何完成

    function sendResponseStream(req, res){
      const s3 = new AWS.S3();
      s3.getObject({Bucket: myBucket, Key: myFile})
        .createReadStream()
        .pipe(res);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多