如何使用python将BLOB转换为图像

时间:2018-10-26 11:03:46

标签: javascript python ajax flask blob

我需要使用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()

1 个答案:

答案 0 :(得分:0)

  1. 不要以文本形式读取文件,您正在处理二进制数据。
    传输json二进制文件的最佳方法是,如果您将文件读取为base64 reader.readAsDataURL(file),可以对所有文件进行编码个字节到安全的base64字符串。然后,您还必须使用python对其进行解码。

  2. 我不鼓励您在处理文件传输时使用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))
})