我需要使用blob从客户端向服务器发送图像
我已经在jquery(客户端)中将图像转换为BLOB
并将blob发送到python flask(服务器端),问题是,我无法从BLOB
重新创建图像。我已经在python中尝试了以下代码,但无法获取图片
jQuery代码将图像转换为blob:
function changeFile() {
var file = this.files[0];
var reader = new FileReader();
reader.addEventListener('load', readFile);
reader.readAsText(file);
}
function readFile(event) {
document.body.textContent = event.target.result;
console.log(event.target.result);
appendFileAndSubmit(event.target.result);
}
function appendFileAndSubmit(imageUrl){
var ImageURL = imageUrl
var data = {
'logo':ImageURL
}
$.ajax({
url: 'http://sdsdss/User/imgBlob',
method: 'POST',
dataType : 'json',
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8'
}).done(function(response){
var datas = JSON.parse(response);
console.log(datas);
});
}
document.getElementById("inp").addEventListener("change", changeFile);
Python代码:重新创建BLOB
进行镜像
function getImage(self):
reqData = json.loads(request.data)
Logo = reqData['logo']
png_recovered = base64.decodestring(Logo)
f = open("temp.png", "w")
f.write(png_recovered)
f.close()
答案 0 :(得分:0)
不要以文本形式读取文件,您正在处理二进制数据。
传输json二进制文件的最佳方法是,如果您将文件读取为base64 reader.readAsDataURL(file)
,可以对所有文件进行编码个字节到安全的base64字符串。然后,您还必须使用python对其进行解码。
我不鼓励您在处理文件传输时使用json,因为它将使带宽增加约3倍(更不用说来回解码和编码所花费的时间了),为此建议您改用FormData。
var fd = new FormData()
fd.append('logo', files[0])
$.ajax({
url: 'http://sdsdss/User/imgBlob',
method: 'POST',
data: fd,
// Setting false prevent jQuery from transforming the data
processData: false,
contentType: false
}).then(function(response) {
console.log(JSON.parse(response))
})