转载请注明出处:http://blog.csdn.net/jinixin/article/details/77545140
引言想借着这篇文章简要谈谈WebUploader大文件上传与Python结合的实现。
WebUploader是百度团队对大文件上传的前端实现,而后端需要根据不同的语言自己实现。这里我采用Python语言的Flask框架搭建后端,配合使用Bootstrap前端框架渲染上传进度条,效果图在文章底部。
WebUploader官网:点这里;WebUploader API:点这里;
实施http协议并不是非常适合上传大文件,所以要考虑分片,即把大文件分割后再上传,而WebUploader所做的事,正是将一个大文件分片,一部分一部分的上传到服务器。在上传每个分片的http请求中,需要同时携带:
1)该文件的唯一标识:task_id;
2)该文件的分片总数:chunks;
3)该分片在该文件所有分片中的位置:chunk;
其中后两个WebUploader已经替我们自动上传了,而第一个task_id仅需要我们调用对应函数即可产生,然后再将其写入form-data。
WebUploader是一个前端框架,所以接收文件的部分需要我们自己实现,而我选用了Python和其的Flask框架。 后端要做的是接收这一大堆分片,然后将它们重新合并成一个文件,那么有如下三个问题:
1)如何判定某个分片上传后,是不是整个文件也上传结束了?
WebUploader已经为我们解决了,详见下面代码。
$(document).ready(function() {
var task_id = WebUploader.Base.guid(); //产生task_id,唯一标识该文件
var uploader = WebUploader.create({
server: '/upload/accept', //服务器接收并处理分片的url地址
formData: {
task_id: task_id, //上传分片的http请求携带的数据
},
});