http://www.laurentluce.com/posts/upload-to-django-with-progress-bar-using-ajax-and-jquery/
本文中我打算描述一下,我如何实现用 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'
);
url:'/upload?X-Progress-ID=' +$( ).val(), |
beforeSubmit: showRequest,monospace!important; font-size:1em!important; direction:ltr!important; display:inline!important; background:none!important">success: showResponse |
8 |
'#form_upload').ajaxSubmit(options); |