jquery - > django文件上传

时间:2015-12-06 16:09:52

标签: jquery django forms

是的,这是如何将文件从jquery客户端上传到django服务器的另一个问题,除了在线找到的~15个解决方案都没有为我工作。 (并且请原谅我的noobness - 我一般不常使用Web框架。)

所以,设置如下:
客户方:

    var formData = new FormData();
    formData.append('file', response.output['file'], response.output['name'])
    $.ajax({
      url: "djangourl",
      data: formData,
      processData: false,
      contentType: false, // also tried setting 'multipart/form-data', no profit
      mimeType: 'multipart/form-data',
      type: 'POST',
      dataType: 'json',
      cache: false,
      success: function(data){
        alert(JSON.stringify(data));
      },
      error: function(data){
        alert(JSON.stringify(data));
      }
    });

服务器端:

@require_http_methods(["POST"])
@csrf_exempt
def upload_document(request, project_id):
    try:
        if request.FILES:
            return HttpResponse(json.dumps("Yay!", default=json_util.default), status=200, content_type="application/json")
        else:
            return HttpResponse(json.dumps("Nah.", default=json_util.default), status=200, content_type="application/json")
    except Exception as e:
        return HttpResponseServerError(str(e))

每次尝试这个时,我都会得到空的request.FILES,任何想法为什么?

更新:事实证明,request.POST包含绑定到“[object FileList]”的键'file'(字面意思是这个字符串),如果这有助于澄清情况无论如何。

1 个答案:

答案 0 :(得分:1)

事实证明,我从前端(基于Aurelia的app)收到的response.output [&#39; file&#39;]是一个FileList对象而不是单个文件(尽管没有multiple说明符被赋予<input>标签)。结束主题,谢谢。