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)
请参阅下面的示例,使用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 上传多个文件的教程(使用这个特定的库)。
| 归档时间: |
|
| 查看次数: |
2644 次 |
| 最近记录: |