在Django中使用jQuery上传文件

0 投票
2 回答
949 浏览
提问于 2025-04-18 07:49

我想用jQuery把一个csv文件上传到Django的视图里。

<form  id="form" enctype="multipart/form-data" >
<input type="file" name="ListFile" id="ListFile" />
<button type="button" onclick="csv_send">upload</button>
</form><br>


这是js代码:

function csv_send(){
var data = {
'csrfmiddlewaretoken' : $('input[name=csrfmiddlewaretoken]').val(),
'data': $("#ListFile").val()
}
/*$.ajax({
  type: 'POST',
  url:'/list/create/',
  cache:false,
  dataType:'json',
  data:data,
  success: function(result) {
     console.log("ok")
    }
 });*/
}


这是Django的views.py文件:

def createlist(request):
    if request.method == 'POST':
        file =  request.FILES


这里没有获取到文件。
我知道可以通过表单的action来获取文件。但我想通过JavaScript来上传文件,因为我希望在成功后能得到JavaScript的响应。
简单来说,我想在views.py里通过request.FILES来获取这个文件。

2 个回答

0

你需要使用一个叫做 FormData 的对象,并且稍微修改一下基本的 ajax 提交方式:

    var data = new FormData();
    var file = null;

    //when uploading a file take the file
    $("#your-file-input-id").on("change", function(){
        file = this.files[0]
    });

    //append the file in the data
    data.append("file", file);

    //append other data
    data.append("message", "some content");

    $.ajax({
        url: '/path',
        type: 'POST',
        data: data,
        contentType: false,
        processData: false,
        success: function (data, status, xhr) {
            //handle success            },
        error: function (data, status, xhr) {
            //handle error
        }

    });

在 Django 中,你可以通过 request.FILES['file'] 来找到这个文件。希望这些信息对你有帮助。

1

在上传文件的时候,你的表单必须有这个属性:

enctype='multipart/form-data'

像这样:

<form  id="form" enctype='multipart/form-data'>

这个链接可能会帮助你理解。

撰写回答