我必须将文件从 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 中所建议的。
这段代码保持不变,这里有趣的是uploadToFirstS3和uploadToSecondS3函数。在这个最小的示例中,两者使用不同的配置执行完全相同的操作,我在这里仅使用一个。
什么效果好:
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包)工作正常。我的问题是,我希望它与 …
我正在使用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用于其他目的,我相信.
谢谢!