Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在从s3提取文件的节点中发出表单数据请求_Node.js_Amazon S3_Multer - Fatal编程技术网

Node.js 如何在从s3提取文件的节点中发出表单数据请求

Node.js 如何在从s3提取文件的节点中发出表单数据请求,node.js,amazon-s3,multer,Node.js,Amazon S3,Multer,大家好,我正试图在nodejs中提出这种类型的请求。我想你可以用multer来做,但有一个主要问题我不想下载文件或从表单上传,我想直接从s3中提取,获取对象并将其作为文件与其他数据一起发送到我的路由。可以这样做吗?我在这里看到两种方法,您可以: 通过管道将此请求传递给用户,这意味着您仍然可以下载并传递它,但您不会将其保存在任何地方,只需通过后端将其流式传输 这里有一个非常类似的问题: 我将复制并粘贴代码片段,仅供参考 function sendResponseStream(req, res)

大家好,我正试图在nodejs中提出这种类型的请求。我想你可以用multer来做,但有一个主要问题我不想下载文件或从表单上传,我想直接从s3中提取,获取对象并将其作为文件与其他数据一起发送到我的路由。可以这样做吗?

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

  • 通过管道将此请求传递给用户,这意味着您仍然可以下载并传递它,但您不会将其保存在任何地方,只需通过后端将其流式传输
这里有一个非常类似的问题:

我将复制并粘贴代码片段,仅供参考

function sendResponseStream(req, res){
  const s3 = new AWS.S3();
  s3.getObject({Bucket: myBucket, Key: myFile})
    .createReadStream()
    .pipe(res);
}
  • 如果文件太大,您无法轻松处理,请在S3中创建预先签名的URL并发送。然后,用户可以在有限的时间内直接从S3下载该文件,详情如下:

  • 是的,这是完全可能的。假设您了解aws sdk的使用方法,您可以创建一个检索文件的方法,并使用此方法获取路由中的数据,并对其执行任何您喜欢的操作

    示例:(助手方法)

    您的路线

    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});
        });
    });
    

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

    我可以将其放入async Wait中吗?一旦我得到数据,我如何实际从路由发送它?是的,您可以将其转换为返回承诺,而不是回调函数。但这完全是另一回事。在路由中执行此函数后,在函数的回调中,可以获得代码中提到的数据。如果在获取else时出错,则返回一个错误创建一个空对象,将属性附加到该对象,并使用
    res.json({routeProperties})从路由以响应的形式发送该对象
    。你能给我一个例子,说明你如何获得文件,然后按照邮递员路线图中所示的格式通过邮递路线发送文件吗W,不。我已经向你展示了方法,其余的由你决定。这是你唯一可以学习的方法。Stackoverlow是一个社区的人谁可以告诉你一个方法,而不是为你写整个代码。
    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});
        });
    });