相关疑难解决方法(0)

如何使用 AWS SDK v3 将流上传到 S3

我必须将文件从 API 端点传输到两个不同的存储桶。原始上传是使用:

curl -X PUT -F "data=@sample" "http://localhost:3000/upload/1/1"
Run Code Online (Sandbox Code Playgroud)

文件上传的端点:

curl -X PUT -F "data=@sample" "http://localhost:3000/upload/1/1"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用两个PassThrough流,以便将请求流复制为两个可读流,如该 SO thread 中所建议的。

这段代码保持不变,这里有趣的是uploadToFirstS3uploadToSecondS3函数。在这个最小的示例中,两者使用不同的配置执行完全相同的操作,我在这里仅使用一个。

什么效果好:

const PassThrough = require('stream').PassThrough;

async function uploadFile (req, res) {
  try {
    const firstS3Stream = new PassThrough();
    const secondS3Stream = new PassThrough();
    req.pipe(firstS3Stream);
    req.pipe(secondS3Stream);

    await Promise.all([
      uploadToFirstS3(firstS3Stream),
      uploadToSecondS3(secondS3Stream),
    ]);
    return res.end();
  } catch (err) {
    console.log(err)
    return res.status(500).send({ error: 'Unexpected error during file upload' });
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码(基于aws-sdk包)工作正常。我的问题是,我希望它与 …

stream node.js aws-sdk-nodejs aws-sdk-js-v3

35
推荐指数
2
解决办法
4万
查看次数

如何使用aws-sdk获取AWS S3上的文件的URL?

我正在使用AWS Lambda函数创建一个文件并将其保存到S3上的存储桶中,它运行正常.执行该putObject方法后,我得到一个data对象,但它只包含Etag最近添加的对象.

s3.putObject(params, function(err, data) {
    // data only contains Etag
});
Run Code Online (Sandbox Code Playgroud)

我需要知道我可以在浏览器中使用的确切URL,以便客户端可以看到该文件.该文件夹已经公开,如果我从S3控制台复制链接,我可以看到该文件.

我试过使用,getSignedUrl但它返回的URL用于其他目的,我相信.

谢谢!

amazon-s3 amazon-web-services node.js

9
推荐指数
2
解决办法
1万
查看次数