簡體   English   中英

使用來自 flutter 應用程序的 createPresignedPost 將圖像上傳到 S3

[英]Upload image to S3 using createPresignedPost from flutter app

所以在花了一整天嘗試不同的事情之后終於發布了這個問題。 掃描網絡以查找所有可能的內容,但無法找出問題所在。 任何指導表示贊賞!

我有一個后端,它使用這個生成預簽名的 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

我看到了你的 http 請求。

您的 AWS 預簽名 url 請求方法是POST 但是在顫動中你使用的是PUT方法。

將其更改為 POST 方法,然后重試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM