[英]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.