使用 Amazon AWS S3 进行简单的文件共享
Using Amazon AWS S3 for simple file sharing
我正在尝试将 AWS s3 集成到我的应用程序中以共享图像。
我目前正在使用 Branch.io 在使用深层链接的设备之间共享内容。但是这种方法有一个问题。我无法发送带有深层链接的图像数据
因此,根据相同的 post 作为参考,我尝试使用 AWS S3 上传文件,然后共享链接。但我相信这种方法要求我的应用程序具有 Cognito 的登录功能,但我不希望那样。
我也尝试为图像生成预签名的 url,但随后,我的凭据在一个小时后过期,我收到 "Expired token" 错误。我目前正在使用这种方法,我只是希望它不会在一小时内过期。 7天左右对我来说足够了,但是一个小时太短了。
我也可以上传图片以供分享 public,因此可以从任何地方自由访问它,但出于安全原因我也不喜欢这样。
处理此问题的最佳方法是什么?
您可以使用最长有效期为 7 天的 S3 预签名 URL。您可以使用查询字符串参数 "X-Amz-Expires".
来设置它
来自 Branch 的 Amruta:
遗憾的是,无法使用 Branch SDK 将图像添加到 link。作为解决方法,如您标记的 post 中所述,您可以在 Branch 仪表板上创建 link 并在社交媒体选项卡中上传图像。保存 link 后,同一选项卡将为您提供 Branch 托管的图像的 link。
不幸的是,这只有在您有一组预定义的图像时才有效。
生成URL时需要传入超时参数,
var params = {Bucket: 'myBucket', Key: 'myKey', Expires: 604800};
生成 getSigned 的示例代码 URL。
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var params = {Bucket: 'myBucket', Key: 'myKey', Expires: 604800};
var url = s3.getSignedUrl('getObject', params);
console.log("get URL is", url);
一周 604800 秒。
希望对您有所帮助。
我通过不使用 AWS SDK 生成的临时凭证解决了这个问题。相反,我通过 AWS 仪表板为该应用程序创建了一个新用户,并为其授予了能够上传对象的必要权限。在代码中,我使用新用户的 ID 和密钥生成了一个新的基本 AWS 凭证。
现在我可以创建一个预签名的 url,它最多可运行 1 周。我什至可以通过使用 V2 签名来增加到期日期。
我正在尝试将 AWS s3 集成到我的应用程序中以共享图像。
我目前正在使用 Branch.io 在使用深层链接的设备之间共享内容。但是这种方法有一个问题。我无法发送带有深层链接的图像数据
因此,根据相同的 post 作为参考,我尝试使用 AWS S3 上传文件,然后共享链接。但我相信这种方法要求我的应用程序具有 Cognito 的登录功能,但我不希望那样。
我也尝试为图像生成预签名的 url,但随后,我的凭据在一个小时后过期,我收到 "Expired token" 错误。我目前正在使用这种方法,我只是希望它不会在一小时内过期。 7天左右对我来说足够了,但是一个小时太短了。
我也可以上传图片以供分享 public,因此可以从任何地方自由访问它,但出于安全原因我也不喜欢这样。
处理此问题的最佳方法是什么?
您可以使用最长有效期为 7 天的 S3 预签名 URL。您可以使用查询字符串参数 "X-Amz-Expires".
来设置它来自 Branch 的 Amruta:
遗憾的是,无法使用 Branch SDK 将图像添加到 link。作为解决方法,如您标记的 post 中所述,您可以在 Branch 仪表板上创建 link 并在社交媒体选项卡中上传图像。保存 link 后,同一选项卡将为您提供 Branch 托管的图像的 link。
不幸的是,这只有在您有一组预定义的图像时才有效。
生成URL时需要传入超时参数,
var params = {Bucket: 'myBucket', Key: 'myKey', Expires: 604800};
生成 getSigned 的示例代码 URL。
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var params = {Bucket: 'myBucket', Key: 'myKey', Expires: 604800};
var url = s3.getSignedUrl('getObject', params);
console.log("get URL is", url);
一周 604800 秒。
希望对您有所帮助。
我通过不使用 AWS SDK 生成的临时凭证解决了这个问题。相反,我通过 AWS 仪表板为该应用程序创建了一个新用户,并为其授予了能够上传对象的必要权限。在代码中,我使用新用户的 ID 和密钥生成了一个新的基本 AWS 凭证。
现在我可以创建一个预签名的 url,它最多可运行 1 周。我什至可以通过使用 V2 签名来增加到期日期。