Как конвертировать BLOB в изображение с помощью Python - PullRequest
0 голосов
/ 26 октября 2018

Мне нужно отправить изображение с клиента на сервер с помощью BLOB-объекта

Я преобразовал изображение в BLOB в jquery (на стороне клиента) и отправил BLOB-объект в колбу Python (на стороне сервера), проблема в том, чтоЯ не могу воссоздать изображение из 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 голосов
/ 26 октября 2018
  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))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...