将文件上传到 S3 时如何传递 ACL 属性以进行颤振放大?
Posted
技术标签:
【中文标题】将文件上传到 S3 时如何传递 ACL 属性以进行颤振放大?【英文标题】:How to pass ACL properties to flutter amplify while uploading file to S3? 【发布时间】:2021-06-27 10:00:31 【问题描述】:或者如何通过 Flutter Amplify 将图像上传到具有公共访问权限的 s3?
在我当前的 Flutter 项目中,使用 amplify 将文件上传到 S3 时,我无法传递 ACL:public-read 属性。
因此,每当我将新文件上传到 s3 时,我都需要手动将其公开。 所以我只想上传一个对每个人都有公共读取权限的新文件。
我在 javascript 项目中找到了一些解决方案,但在 Flutter 项目中没有。
下面是一个方法,我是用来上传的。
Future<String> uploadFile(String fileName, File local) async
try
Map<String, String> metadata = <String, String>;
metadata['name'] = 'filename';
metadata['desc'] = 'A file';
S3UploadFileOptions options = S3UploadFileOptions(accessLevel: StorageAccessLevel.guest, metadata: metadata);
UploadFileResult result = await Amplify.Storage.uploadFile(key: fileName, local: local, options: options);
return result.key;
catch (e)
print('UploadFile Err: ' + e.toString());
return null;
【问题讨论】:
你能找到解决办法吗? @IgorCorradi 实际上没有,但是我在我的应用程序中做了一个更改,即我在项目中通过公共 URL 显示图像的任何位置,现在我从 Amplify 获取该 URL。 Amplify 将一个令牌(默认有效期为 7 天)附加到该 URL,因此它可以通过 Image 视图显示。 【参考方案1】:我认为您应该使用Dio 来声明将用于发布请求的客户端对象 您可以在以下answer中找到示例代码
【讨论】:
但在示例中multipart与dio
一起使用上传文件,我的要求是使用Amplify.Storage上传文件。【参考方案2】:
到目前为止,Flutter Amplify 没有提供任何选项来上传可公开访问的图像。 它始终以私有读取访问权限上传。
所以我更新了项目中的一些内容,如下所述。
在 Amplify 集成之前,我将图像上传到 S3 并将该 URL 存储到 我的服务器,无论我必须显示什么,我只是从我的服务器获取 URL并加载图片。
但现在我将key
(用于通过 Amplify 将图像上传到 S3)存储到我的服务器。
为了显示图像,我使用 key
(存储在我的服务器中)从 Amplify 获取图像 URL。
Amplify 将令牌添加到图像 URL,默认有效期为 7 天
Future<String> getUrl(String key) async
try
S3GetUrlOptions options = S3GetUrlOptions(accessLevel: StorageAccessLevel.guest, expires: 10000);
GetUrlResult result = await Amplify.Storage.getUrl(key: key, options: options);
String url = result.url;
return url;
catch (e)
print('GetUrl Err: ' + e.toString());
return null;
所以它可以被ImageView显示出来。
【讨论】:
以上是关于将文件上传到 S3 时如何传递 ACL 属性以进行颤振放大?的主要内容,如果未能解决你的问题,请参考以下文章