【问题标题】:AJAX DJango Get files from multiple file fieldAJAX DJango 从多个文件字段中获取文件
【发布时间】:2018-07-27 11:59:22
【问题描述】:

我正在使用 AJAX 和 DJango 上传多个文件,但遇到了问题。 如何从字段输入中获取文件并将它们推送到data? HTML:

<form id="add_photos" method="post" action="" enctype="multipart/form-data">

  {% csrf_token %}
  <input type="file" name="file[]" multiple id="files">

  <input type="submit" name="submit" value="Submit" />

</form>

JS:

function formSubmit(e) {
      e.preventDefault();

      $.ajax({
        method: 'POST',
        data: form.serialize(),
        url: '.',
        success: function(data) {
          console.log(data);
        },
        error: function (data) {
          console.log(data);
        }
      });
    }

【问题讨论】:

    标签: javascript python ajax django


    【解决方案1】:

    请参见下面使用FormData 的示例。但请注意,它可能不适用于旧的 IE 浏览器(我认为 8、9 不行)。

    <input type="file" id="upload_file" data-import-url="{% url 'upload_file' %}" data-csrf-token="{{ csrf_token }}" multiple>
    

    然后是 jQuery:

    $("#upload_file").change(function () {
    
      var url = $(this).attr("data-import-url")
      var data = new FormData();
      $.each($("#upload_file")[0].files, function(i, file) {
        data.append("file", file);
      });
      data.append("csrfmiddlewaretoken", $(this).attr("data-csrf-token"));
    
      $.ajax({
        url: url,
        data: data,
        cache: false,
        contentType: false,
        processData: false,
        type: 'post',
        beforeSend: function () {
          // before send, display loading, etc...
        },
        success: function (data) {
          // success handling...
        },
        error: function () {
          // error handling... 
        }
      });
    
    });
    

    在您看来,您可以像这样得到它:

    uploaded_files = request.FILES.getlist('file')
    

    如果您需要支持旧版浏览器,jQuery File Upload 是一个非常好的库。我写了一篇关于multiple files upload using Django + Ajax 的教程(使用这个特定的库)。

    【讨论】:

    • 只处理一个文件,OP想要多个文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2017-09-09
    • 2012-05-14
    • 2011-12-20
    相关资源
    最近更新 更多