将文件上传到 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 属性以进行颤振放大?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 pdf 上传到 S3 存储桶?

如何查找用户以为 S3 存储桶创建 ACL?

如何将文件上传到 S3 并使用 boto3 将其公开?

如何在将文件上传到s3时处理互联网不可用?

使用无服务器框架上传时文件在 S3 上损坏

从 Apache Spark 分段上传到 Amazon S3