FormData пуст или отсутствует в Django представлениях - PullRequest
0 голосов
/ 30 января 2020

Как правильно получить значения FormData в Django 1.8? Ясно, что у него есть данные, так как я пытался просмотреть их на консоли, но каким-то образом не смог получить к ним доступ через Django view. Вот мой код на стороне клиента:

reader.addEventListener("loadend", function() {
  var imgsrc = reader.result;
  storedFiles.push(imgsrc);
  var html = "<div class=\"col text-center\"><img src=\"" + imgsrc + "\" data-file='" + f.name + "' class='img-fluid selFile' title='Click to remove'><br/>" + i + "</div>";
  selDiv.append(html);
  //call extract text

  var formdata = new FormData();
  formdata.append("image", imgsrc);
  console.log(formdata.get("image"));
  $.ajax({
    crossDomain: true,
    type: "GET",
    data: formdata,
    dataType: 'json',
    processData: false,
    contentType: "multipart/form-data",
    url: "/scan/scanner",
    beforeSend: function() {

    },
    success: function(response) {
      var parseResp = JSON.parse(response);
      $("#extracted_text").append(parseResp.extracted_txt);
    },
    error: function(e) {
      alert(e.statusText);
    }
  });
}, false);

и простой вид в Django:

def callWebScanner(request):
    print 'Django View'
    imgstring = request.FILES.get("image")
    print imgstring

1 Ответ

0 голосов
/ 31 января 2020

Мне удается решить, выполнив следующие действия:

  1. установить тип запроса на POST Это вызывает ошибку токена csrf в Django, мне пришлось добавить декоратор @csrf_exempt на моем views.
  2. Передавайте двоичный объект вместо строки base64 для значения данных
var formdata = new FormData();    
formdata.append("image", blob, "File" + i);
Прочитайте это так: blob = request.FILES['image']. Затем вы можете сохранить изображение в каталоге, назначенном на MEDIA_ROOT:
blob = request.FILES['image']
unique_id = get_random_string(length=16)
filename = unique_id+'.PNG'
default_storage.save(filename, ContentFile(blob.read()))
scanned_img = default_storage.path(filename)
print scanned_img
...