本文中我打算描述一下,我如何实现用 Ajax 和 jQuery 实现上传文件到Django+进度条。我需要实现这个功能来让用户上传菜品图片到Gourmious并跟踪上传进度。
客户端
首先需要一个表单来让用户选择要上传的文件。
1 |
< form id = "form_upload" action "/upload" method "POST" > |
2 |
input type "file" name "picture" "picture" /> |
3 | "hidden""X-Progress-ID" value "" /> |
4 | "id"5 |
"form_submit_button"class "tp-button" "submit" "Submit" 6 |
</form > |
这里增加了两个隐藏的输入框,第一个是 ‘X-Progress-ID’,代表上传 ID,这样我们才能够在服务器端支持并发的上传请求。稍后我们会看到,服务器是如何处理这个值的。
然后还有一个隐藏输入框 ‘id’,在我们的例子里代表菜品的编号。
我们将使用 Ajax 来发送 POST 请求,这样表单便可以很好地集成在现代的网络界面中,同时包含一个进度条。我们打算使用jQuery Form plugin来实现这一点。
函数 ajaxSubmit() 将会帮我们搞定一切。
为上传 ID 生成一个随机字串,并用它设置输入框的值。
需要指定一个用于上传请求的 URL 和两个回调函数:一个在请求前调用,另一个在请求完成后调用。
'#X-Progress-ID'
).val(
'random string'
);