FormData为空或在Django视图中为None

问题描述 投票:0回答:1

如何在Django 1.8中正确获取FormData值?显然,当我尝试在控制台上查看它时,它具有数据,但是以某种方式无法通过Django视图访问它。这是我的客户端代码:

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
django ajax form-data
1个回答
0
投票

我设法做到以下几点:

  1. 将请求类型设置为POST这会导致Django中的csrf令牌错误,我必须在视图上添加@csrf_exempt装饰器。
  2. 通过blob代替数据值的base64字符串
var formdata = new FormData();    
formdata.append("image", blob, "File" + i);
  1. 在这样的视图上阅读: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
© www.soinside.com 2019 - 2024. All rights reserved.