gpt4 book ai didi

amazon-web-services - 通过 Flutter App 中的 PreSigned URL 将文件上传到 S3。但是当我下载它时文件已损坏

转载 作者:行者123 更新时间:2023-12-04 12:18:24 26 4
gpt4 key购买 nike

我正在开发 Flutter 应用程序,在其中使用预签名 URL 将图像文件(PUT 请求)上传到 AWS S3。上传成功,因为我可以在 S3 中看到文件。但是当我单击并从存储桶中下载它时,下载的文件已损坏。

我正在使用 Dio 库上传文件。
通过 postman 将图像文件上传为二进制文件非常有效

uploadFileToPresignedS3(
File payload, String fileName, String presignedURL) async {
try {
Dio dio = new Dio();

FormData formData = new FormData.from(
{"name": fileName, "file1": new UploadFileInfo(payload, fileName)});
dio.put(presignedURL, data: formData);
} catch (ex) {
print(ex);
}
}



预期:上传的文件不会被破坏

实际结果:上传的文件已损坏

最佳答案

使用此代码使用 Dio 将文件(图像)上传到 S3 预签名 URL 并显示 上传进度 :

await dio.put(
url,
data: image.openRead(),
options: Options(
contentType: "image/jpeg",
headers: {
"Content-Length": image.lengthSync(),
},
),
onSendProgress: (int sentBytes, int totalBytes) {
double progressPercent = sentBytes / totalBytes * 100;
print("$progressPercent %");
},
);

注意:不要设置 内容类型 标题以及 内容长度 像这样:
headers: {
"Content-Length": image.lengthSync(),
"Content-Type": "image/jpeg",
},

由于某种原因,它会导致上传的文件损坏。

以防万一:而不是 print("$progressPercent %")您可以使用 setState()在 UI 中显示更新。

希望这可以帮助。

关于amazon-web-services - 通过 Flutter App 中的 PreSigned URL 将文件上传到 S3。但是当我下载它时文件已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56577788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com