将文件上传到 S3 时如何将 ACL 属性传递给 flutter amplify?
How to pass ACL properties to flutter amplify while uploading file to S3?
或者如何通过 Flutter Amplify public 访问将图像上传到 s3?
在我目前的flutter项目中,使用amplify上传文件到S3时无法通过ACL:public-read 属性。
因此,每当我将新文件上传到 s3 时,我都需要手动进行 public。
所以我只想上传一个新文件,每个人都有 public 读取权限。
我在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;
}
我认为您应该使用 Dio 来声明将用于发布请求的客户端对象
您可以在以下 answer
中找到示例代码
到目前为止 Flutter Amplify 没有提供任何选项来上传具有 public 访问权限的图像。
它始终以私有读取权限上传。
所以我更新了项目中的一些内容,如下所述。
在 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就可以显示了
或者如何通过 Flutter Amplify public 访问将图像上传到 s3?
在我目前的flutter项目中,使用amplify上传文件到S3时无法通过ACL:public-read 属性。
因此,每当我将新文件上传到 s3 时,我都需要手动进行 public。 所以我只想上传一个新文件,每个人都有 public 读取权限。
我在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;
}
我认为您应该使用 Dio 来声明将用于发布请求的客户端对象 您可以在以下 answer
中找到示例代码到目前为止 Flutter Amplify 没有提供任何选项来上传具有 public 访问权限的图像。 它始终以私有读取权限上传。
所以我更新了项目中的一些内容,如下所述。
在 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就可以显示了