Python Tech

Django+又拍云+file-uploader快速实现批量上传

最近做的工作都和Django没什么关系,或者都是比较底层的算法,不方便share,所以分享一些老东西。

之前写过Django用uploadify实现图片批量上传,从反馈来看,问题很多。现在uploadify更新到了3.2版,仍然是用swf来实现批量上传,代码还是老样子一团糟。作为替代换成了file-uploader,虽然是multipart/form-data来实现批量上传,不如swf的方式通用。但我不需要兼容老版本浏览器,做的都是富js应用,更看重代码的可扩展性,file-uploader更合适。

再说又拍云,最开始是在UEditor里做了一个图片上传到又拍云的功能,自动生成缩略图和水印的功能节省了不少开发时间。后来遇到一些不需要富文本编辑器的场合,就把这部分功能抽了出来,代码量非常小,是我至今用过的最快也是最通用的图片批量上传方案。

Javascript

首先在前台实现file-uploader。例子很简单,引入相关js/css文件,加载上传组件。其中params是要传递的参数,会以GET参数的形式传递到后台。options设置了图片选定自动上传(autoupload: true)且关闭了批量上传

Django

点击上传按钮,选择图片,前端会请求api/posts/upload.json?postId=1&qqfile=上传文件名 ,之前关于uploadify最常见的问题就是取不到正确的request,因为uplodify是swf上传,对于file-uploader就不会有这个情况。用以下几行代码实现通过request.read的方式来读取上传的图片数据。

如果不用又拍云,只保存上传的图片,就把image_content写入文件:

Upyun

下载又拍云提供的PythonSDK,把获得的图片文件传上去,返回图片地址,完整代码如下:

根据又拍云的文档,可以用put方式来上传,所以不用sdk,简单把文件传到又拍云的代码是:

7 thoughts on “Django+又拍云+file-uploader快速实现批量上传”

Leave a Reply

Your email address will not be published. Required fields are marked *