You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:05:19