AJAX DJango 从多个文件字段中获取文件

Car*_*web 4 javascript python django ajax

我正在使用 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>
Run Code Online (Sandbox Code Playgroud)

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);
        }
      });
    }
Run Code Online (Sandbox Code Playgroud)

Vit*_*tas 6

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

<input type="file" id="upload_file" data-import-url="{% url 'upload_file' %}" data-csrf-token="{{ csrf_token }}" multiple>
Run Code Online (Sandbox Code Playgroud)

然后是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... 
    }
  });

});
Run Code Online (Sandbox Code Playgroud)

在你看来,你可以这样理解:

uploaded_files = request.FILES.getlist('file')
Run Code Online (Sandbox Code Playgroud)

如果您需要支持旧浏览器,jQuery File Upload是一个非常好的库。我写了一个关于使用 Django + Ajax 上传多个文件的教程(使用这个特定的库)。