【发布时间】: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