【发布时间】:2020-09-13 12:17:51
【问题描述】:
我正在尝试使用 POST 将图像上传到 AWS 上的存储桶,我应该如何在 python3 中解码?
当我使用程序制作方法 Post (Insomnia) 时,它会正确保存在 Bucket 中。但是当我使用 Ajax 执行此操作时,它也会以相同的文件大小保存,但是当我打开图像时它不起作用,图像已损坏。
使用 AJAX 发送:
var form;
$("#file").change(function() {
form = new FormData();
form.append('file', event.target.files[0]);
});
function uploadFile(){
$.ajax({
url: 'myUrlApi',
crossDomain : true,
processData: false,
data: form,
contentType: 'image/png',
type: 'POST',
success: function (data) {
console.log(data)
}
});
}
在 python3 Lambda 中检索以保存在 Bucket 中:
import boto3
import base64
def lambda_handler(event, context):
s3 = boto3.client("s3")
get_file_content = event["content"]
decode_content = base64.b64decode(get_file_content)
s3.put_object(Bucket="mybucket", Key="exampleUpload.png", Body=decode_content)
我无法复制 Insomnia 发送的相同类型的文件,因此它损坏了图像。
当我使用 AJAX 在 FormData 中发送文件时,我会得到什么类型的文件?
我也尝试在 Base64 上以字符串形式发送图像,但它也损坏了。
【问题讨论】:
-
为什么要发布表单而不是文件数据本身?
-
如果你想解析
multipart/form-data,看看这个答案。 stackoverflow.com/a/33370069/10692493 -
@jellycsc 我还没有找到发送文件的方法,所以我就这样使用它。我会查看您发送的链接,谢谢。
标签: javascript python-3.x ajax image amazon-s3