【问题标题】:Upload image to S3 using createPresignedPost from flutter app使用来自 flutter 应用程序的 createPresignedPost 将图像上传到 S3
【发布时间】:2022-12-17 19:31:10
【问题描述】:

所以在花了一整天尝试不同的事情之后终于发布了这个问题。扫描网络以查找所有可能的信息,但无法找出问题所在。任何指导表示赞赏!

我有一个后端,它使用这个生成预签名的 url:

await createPresignedPost(s3Client, {
    Bucket: bucketName,
    Key: `${currentUser.uid}/${fileContext}/${fileContextId}/${fileName}`,
    Expires: signedUrlExpireSeconds || 900, // S3 default is 900 seconds (15 minutes)
  });

然后我尝试使用邮递员上传文件并且上传正常

.

但是,当我尝试在物理 Android 设备上使用 Flutter 应用程序上传文件时,出现错误

   Future<void> uploadImage(XFile imageFile) async {
    try {
      final signedUrlParams = await getPreSignedUrlFromServer(
        fileName: imageFile.name,
        fileContext: 'xyz',
        fileContextId: id,
      );

      final uri = Uri.parse(signedUrlParams['url']);
      final httpImage =
          await http.MultipartFile.fromPath(imageFile.name, imageFile.path);

      var uploadRequest = http.MultipartRequest('PUT', uri);

      uploadRequest.files.add(httpImage);

      uploadRequest.headers.addAll({
        'Content-Type': 'multipart/form-data',
      });

      uploadRequest.fields.addAll({
        "bucket": signedUrlParams["fields"]["bucket"],
        "key": signedUrlParams["fields"]["key"],
        "X-Amz-Algorithm": signedUrlParams["fields"]["X-Amz-Algorithm"],
        "X-Amz-Credential": signedUrlParams["fields"]["X-Amz-Credential"],
        "X-Amz-Date": signedUrlParams["fields"]["X-Amz-Date"],
        "X-Amz-Security-Token": signedUrlParams["fields"]
            ["X-Amz-Security-Token"],
        "Policy": signedUrlParams["fields"]["Policy"],
        "X-Amz-Signature": signedUrlParams["fields"]["X-Amz-Signature"],
      });

      final response = await uploadRequest.send();

      if (response.statusCode != 204) throw Exception();
    } catch (err) {
      throw ('Error uploading image: $err');
    }
  }

这是我得到的错误

response status code: 403
response header: {connection: close, transfer-encoding: chunked, date: Sun, 04 Sep 2022 20:02:17 GMT, x-amz-request-id: 5QH13MNXZXBV3T, content-type: application/xml, x-amz-id-2: 7X8S3tLat9hRpMfBk/xrYTKavWuc7emeOlp1YASH+/oKvNfM=, server: AmazonS3}
response reason: Forbidden

【问题讨论】:

    标签: flutter amazon-s3 pre-signed-url


    【解决方案1】:

    我看到了你的 http 请求。

    您的 AWS 预签名 url 请求方法是邮政. 但是在颤振中你正在使用方法。

    将其更改为 POST 方法,然后重试

    【讨论】:

      猜你喜欢
      • 2022-07-02
      • 2019-04-29
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 2019-02-21
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多