使用flatter和node.js直接上传S3
我有一个node.js REST API,它可以保存用户的“帖子”,然后以JSON API格式检索数据,这很好,但我还需要在每个“帖子”中附加一些图像。我如何直接从我的flatter客户端上传到AWS S3,问题是我对如何处理这个问题有点困惑,因为我不想因为负载而通过我的服务器推送图像。我看到了一些关于如何上传图像的插件,但问题是我需要将图像链接保存在一个数组中,以便在用户打开它时加载图像,但是如果我首先需要上传图像并获取链接,我如何才能将链接保存到我的API中。谢谢 思想是,您的nodejs代码必须为每个文件生成预签名的url,并将其作为json的一部分发送 预签名URL是从S3访问文件而不公开S3存储桶的最安全的方法 下面是一个获取URL的nodejs代码示例使用flatter和node.js直接上传S3,node.js,amazon-s3,flutter,Node.js,Amazon S3,Flutter,我有一个node.js REST API,它可以保存用户的“帖子”,然后以JSON API格式检索数据,这很好,但我还需要在每个“帖子”中附加一些图像。我如何直接从我的flatter客户端上传到AWS S3,问题是我对如何处理这个问题有点困惑,因为我不想因为负载而通过我的服务器推送图像。我看到了一些关于如何上传图像的插件,但问题是我需要将图像链接保存在一个数组中,以便在用户打开它时加载图像,但是如果我首先需要上传图像并获取链接,我如何才能将链接保存到我的API中。谢谢 思想是,您的nodejs代
const getPresignedUrl = async (fileName, fileType) => {
const S3_BUCKET = 'my-s3-bucket'
const s3 = new AWS.S3(); // Create a new instance of S3
// Set up the payload of what we are sending to the S3 api
const s3Params = {
Bucket: S3_BUCKET,
Key: fileName,
Expires: 5000,
//ContentType: fileType,
// ACL: 'public-read',
ContentType: 'application/octet-stream'
};
// Make a request to the S3 API to get a signed URL which we can use to upload our file
try {
const data = await s3.getSignedUrlPromise('getObject', s3Params);
const returnData = {
signedRequest: data,
url: `https://${S3_BUCKET}.s3.amazonaws.com/${fileName}`
};
return returnData;
} catch (err) {
console.log('err: ', err);
}
}
希望这有帮助