如何在python3中使用方法POST AJAX接收FormData?



我正在尝试使用 POST 将图像上传到 AWS 上的存储桶,我应该如何用 python3 解码?

当我使用程序制作方法Post(失眠(时,它会正确保存在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 中检索以保存在存储桶中:

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 上以字符串形式发送图像,但它也损坏了。

我设法解决了我的问题。

我将图像转换为 Base64,并将其发送到 Lambda 以保存在 AWS 存储桶中。 Lambda 再次收到转换为 Base64 的数据,因此我对其进行了两次解码并获得了正确的图像。

var fileInB64 = ''
function getBase64(file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
fileInB64 = reader.result.split(',')[1];
};
reader.onerror = function (error) {
console.log('Error: ', error);
};
}
$("#file").change(function() {
var file = document.querySelector('.divFile > input[type="file"]').files[0];
getBase64(file)
});
function uploadFile(){
$.ajax({
url: 'myUrlApi',
crossDomain : true,
processData: false,
data: fileInB64,
contentType: 'image/png',
type: 'POST',
success: function (data) {
console.log(data)
}
});
}

在Lambda python3中,我对其进行了两次解码并得到了正确的图像。

import boto3
import base64

def lambda_handler(event, context):
s3 = boto3.client("s3")
get_file_content = event["content"]
stringBase64 = base64.b64decode(get_file_content)
toBase64FromBase64 = base64.b64decode(stringBase64)
s3.put_object(Bucket="mybucket", Key="exampleUpload.png", Body=toBase64FromBase64)

最新更新