Flutter中基于Amplify获取S3 URL后生成预签名URL的方法
如何用Amplify Flutter生成S3预签名URL
你当前的代码调用Amplify.Storage.getUrl获取的私有对象URL本身就是预签名URL,但如果需要自定义有效期或更明确地生成预签名URL,可以通过配置GetUrlOptions实现,具体操作如下:
生成下载用预签名URL
修改原有函数,添加过期时间等配置项:
getPresignedDownloadUrl() async { final user = await AmplifyAuthCognito().getCurrentUser(); try { // 配置预签名URL的有效期,示例为1小时 final options = GetUrlOptions( expiresIn: const Duration(hours: 1), accessLevel: StorageAccessLevel.private, // 对应私有存储类别 ); final result = await Amplify.Storage.getUrl( key: user.userId, options: options, ); print('预签名下载URL: ${result.url}'); } on StorageException catch (e) { safePrint('生成预签名URL出错: $e'); } }
关键参数说明
expiresIn:设置URL的有效期,最大时长受限于AWS S3配置(默认最长7天)accessLevel:指定对象的访问权限级别,private为用户私有目录,若使用protected或public需对应调整Amplify配置及对象存储位置
生成上传用预签名URL
如果需要生成用于直接上传文件的预签名URL,可使用getUploadUrl方法:
getPresignedUploadUrl() async { final user = await AmplifyAuthCognito().getCurrentUser(); final uploadKey = '${user.userId}/custom-upload-file.jpg'; // 自定义上传文件的存储key try { final options = GetUploadUrlOptions( expiresIn: const Duration(hours: 1), accessLevel: StorageAccessLevel.private, ); final result = await Amplify.Storage.getUploadUrl( key: uploadKey, options: options, ); print('预签名上传URL: ${result.url}'); // 后续可通过该URL发起PUT请求直接上传文件 } on StorageException catch (e) { safePrint('生成上传预签名URL出错: $e'); } }
内容的提问来源于stack exchange,提问作者Apps dev
相关产品推荐
相关产品推荐

