我知道,关于这个主题的话题并非没有,但请耐心等待。我想使用Ajax或等效文件将文件上传到服务器。
# html <form method="post" id="Form" enctype="multipart/form-data"> {% csrf_token %} # django security <input id="image_file" type="file" name="image_file"> <input type="submit" value="submit"> </form>
# javascript $(document).on('submit', '#Form', function(e){ e.preventDefault(); var form_data = new FormData(); form_data.append('file', $('#image_file').get(0).files); $.ajax({ type:'POST', url:'my_url', processData: false, contentType: false, data:{ logo:form_data, csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(), # django security }, }); });
# views.py (server side) def myFunction(request): if request.method == 'POST': image_file = request.FILES ... ...
我猜我配置ajax函数的方式存在问题,因为在调试模式下,除之外的所有数据均会返回logo。
logo
我做错了什么吗?
回顾过去,较旧的答案不切实际,不建议使用。asnyc: false暂停整个Javascript以仅上传文件, 您可能会在上传过程中触发其他功能 。
asnyc: false
如果您仅将JQuery用于ajax,则我建议使用axios:
ajax
axios
const axios = require('axios'); var formData = new FormData(); formData.append('imageFile', document.querySelector('#image_file').files[0]); axios({ method: 'post', url: 'your_url', data: formData, headers: { "X-CSRFToken": CSRF_TOKEN, # django security "content-type": "multipart/form-data" } }).then(function (response) { # success });
Axios文档
jQuery / Ajax答案:
var formData = new FormData(); formData.append('imageFile', $('#image_file')[0].files[0]); formData.append('csrfmiddlewaretoken', CSRF_TOKEN); # django security $.ajax({ url : 'your_url', type : 'POST', data : formData, processData: false, contentType: false, success : function(data) { # success } });
jQuery / Ajax文档