【问题标题】:request.FILES is emptyrequest.FILES 为空
【发布时间】:2019-10-06 14:52:30
【问题描述】:

我有一个带有<input type="file"> 的表单,用于选择要上传的图像,一旦单击上传按钮,就会发送一个 POST XMLHttpRequest,它调用应该将图像保存在服务器上的upload_view。但是,由于某种原因,我的 request.FILES 是空的。当我console.log(document.getElementById('fileToUpload').files 时,我可以看到那里的文件。而我的request.POST 看起来像这样:

<QueryDict: {'fileToUpload': ['[object FileList]'], 'csrfmiddlewaretoken': ['bOjUFzTnMVbHOWOQURj2egJuRizsVJIBMSfQra4yuz7MX3DOEaRPHbMVnY8xyIsU']}>

我的看法:

def upload_view(request):
    key = f'{request.user}-{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}'
    for file in request.FILES.getlist('fileToUpload'):
        TemporaryImage.objects.create(image=file, key=key)
    return HttpResponse('complete')

我的 JS:

function uploadFile() {
  var fd = new FormData();
  fd.append("fileToUpload", document.getElementById('fileToUpload').files);

  var value = [];
  document.getElementsByName('csrfmiddlewaretoken').forEach(function(x) {
      value.push(x.value);
  })

  fd.append('csrfmiddlewaretoken', value[0]);

  var xhr = new XMLHttpRequest();

  xhr.open("POST", Urls['upload-view']());
  xhr.send(fd);
}

我的表格:

<form id="form1" enctype="multipart/form-data" method="post">
    {% csrf_token %}
    <label for="fileToUpload">Select a File to Upload</label>
    <input type="file" multiple="multiple" name="fileToUpload" id="fileToUpload">
    <input type="button" onclick="uploadFile()" value="Upload">
</form>

【问题讨论】:

  • 除非您在某处打错字,否则我猜这是一个错误。 docs 明确声明 “POST 不包括文件上传信息。请参阅 FILES。”
  • @CalebGoodman 我不认为这是一个错字。当我这样做时:fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]),即只包含一个文件,我可以在 request.FILES 中找到它。
  • 尝试将数据放入数组构造函数中?

标签: python django


【解决方案1】:

您需要单独附加每个文件。

var fd = new FormData();
var files = document.getElementById('fileToUpload').files;
for (var x=0; x < files.length; x++) {
    fd.append("fileToUpload", files[x]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 2021-05-20
    • 2012-02-13
    • 1970-01-01
    • 2011-11-09
    • 2021-06-21
    • 2013-07-17
    • 2020-06-07
    相关资源
    最近更新 更多