序幕
上次我们实现了七牛云异步上次文件,今天我们来实现又拍云的异步文件上传功能
话不多说,直接实现吧
又拍云
配置服务器
首先进入又拍云官网:https://www.upyun.com/,进行注册登陆

登陆成功后,进入控制台
,找到云服务
,并进入

进入之后,创建服务

这里与七牛云不同的是需要我们新建一个授权操作员

进入创建操作员
之后,将权限全部勾选,而且这个密码是一次性密码,需要我们记录

创建服务成功之后,进入存储管理
,下面可以定义操作员权限


安装库
使用又拍云还需要安装一个库

Django(获取文件,并上传)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import upyun
class UploadFile(View): def post(self,request): img = request.FILES.get('file') up = upyun.UpYun('你的空间名称', username='操作员账号', password='操作员密码') headers = { 'x-gmkerl-rotate': '180' } for chunk in img.chunks(): res = up.put('/touxiang1.jpg', chunk, checksum=True, headers=headers) return HttpResponse(json.dumps({'filename':img.name}),content_type='application/json') -----------------------------------------------------------------------------------------------------
import upyun import threading class UpYunVideo(APIView): def post(self,request): video = request.FILES.get('file') print(video) name = video.name up = upyun.UpYun('你的空间名称','操作员账号','操作员密码') uploader = up.init_multi_uploader('/edu/%s'%name) threads = [] t1 = threading.Thread(target=uploader.upload,args=(0,'分割文件')) threads.append(t1) t2 = threading.Thread(target=uploader.upload,args=(1,'分割文件')) threads.append(t2) for t in threads: t.start() t.join() res = uploader.complete() return HttpResponse(json.dumps({'filename':name}),content_type='application/json')
|
Vue(获取视频数据,传给后端)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| <template> <div> <input @change="upyun_video" type="file" > 上传进度:{{fileloadv}} </div> </template> <script> export default { data () { return { fileloadv:'', } }, components:{ }, mounted:function(){ }, methods:{ upyun_video(e){ let file = e.target.files[0]; let param = new FormData(); param.append('file',file); const config = { headers :{ 'Content-Type': 'multipart/form-data' } } const axios_upyun = this.axios.create({withCredentials:false}); axios_upyun({ method:'POST', url:'http://localhost:8000/upyun/', data:param, timeout:30000, config:config, onUploadProgress:(e)=>{ var com = (e.loaded / e.total); if(com < 1){ this.fileloadv = (com * 100).toFixed(2) + '%' } }, }).then(res=>{ console.log(res) this.fileloadv = '100%' }) }, } } </script> <style scoped>
</style>
|
页面效果

上传成功,返回值

查看文件(上传成功)

同时,又拍云也可以用测试域名(CNAME)+ 设置的路径 + 获取到的名称,来实现查看文件

总结
又拍云上传文件与七牛云上传文件其实,实现的过程没有什么太大的区别,之重要的是又拍云的免费流量比七牛云多出大概5g左右,当然了得加入一个所谓的又拍云联盟:https://www.upyun.com/league