js纯前端实现腾讯cos文件上传功能的示例代码
前言
在前端开发中文件上传是经常会遇到的,并且多数情况会使用第三方平台来存储文件,腾讯云cos是我们常用的。本篇文章就是带我从前端的角度实现腾讯云COS存储。本文参考了腾讯云COS开发文档JavaScriptSDK
步骤
安装腾讯云COS上传所需的sdk
下载cos-js-sdk-v5.min.js并引入index.html
监听文件上传组件
//监听文件变化 document.getElementById('file').onchange=function(){ letfile=this.files[0]; lettype=file.type //初始化文件上传 initUploadObj(that,file.name,file,'image',function(res){ if(res.success){ that.$message.success(res.msg) }else{ that.$message.warning(res.msg) } }) }
初始化文件上传对象(封装起来其他地方上传也可以用)
/** *初始化上传文件对象 *@param{object}Vue *@param{string}fileName文件名 *@param{object}file上传的文件流及文件类型名称相关信息 *@param{Array}允许上传的文件类型 *@param{function}uploadStatusCallbalck *@return{function}返回回调函数 */ exportconstinitUploadObj=function(Vue,fileName,file,type,uploadStatusCallbalck){ letfileInfo={ file_name:fileName, media_type:2, media_sub_type:0, size_of_bytes:122, file_expired_type:'permanent', }; //前端做文件类型限制 if(type=='image'){ type=['.jpg','.gif','.jpeg','.bmp','.png'] } if(type=='excel'){ type=['.xlsx'] } letfileType=file.name?file.name.substring(file.name.lastIndexOf(".")).toLowerCase():''; if(!!type&&type.indexOf(fileType)<0){ uploadStatusCallbalck({success:false,msg:'请上传正确的'+type+'文件格式!'}); return; } varcos=newCOS({ getAuthorization:function(options,callback){ letsingleInfo=Vue.$store.state.fileToken; callback({ TmpSecretId:singleInfo.tmpSecretId, TmpSecretKey:singleInfo.tmpSecretKey, XCosSecurityToken:singleInfo.sessionToken, ExpiredTime:singleInfo.expiredTime, }); }, }); fileInfo.file_name=file.name; //获取文件上传密钥 getFileToken(Vue,fileInfo,cos,file,uploadStatusCallbalck); };
获取文件上传密钥(最好存在后端通过ajax请求获取,安全性较高)
functiongetFileToken(Vue,fileInfo,cos,file,uploadStatusCallbalck){ leturl=process.env.VUE_APP_URL+'/file/secretid'; if(!file)return; //异步获取临时密钥 axios .get(url) .then(function(res){ if(res.data.code==100000){ //获取的临时秘钥存储在vuex中 Vue.$store.commit('UPDATE_FILE_INFO',res.data.data); uploadFile(cos,file,res.data.data,uploadStatusCallbalck); }else{ uploadStatusCallbalck({success:false,msg:'获取文件秘钥失败!'}); } }) .catch(function(err){ uploadStatusCallbalck({success:false,msg:'获取文件秘钥接口出错!'}); }); }
上传文件(调用相关apiputObject来上传文件)
/** *@methoduploadFile *@param{object}cos */ functionuploadFile(cos,file,signInfo,callback){ cos.putObject( { Bucket:process.env.VUE_APP_BUCKET, Region:'ap-shanghai', Key:signInfo.fileId, Body:file, onHashProgress:function(progressData){ console.log('校验中',JSON.stringify(progressData)); }, onProgress:function(progressData){ console.log('上传中',JSON.stringify(progressData)); }, }, function(err,data){ if(err){ console.log(err); callback({success:false,msg:'文件上传失败!'}); return; } callback({success:true,msg:'上传成功!',data:data,signInfo:signInfo}); } ); }
总结
腾讯云cos文件上传实际是分为三步,本地表单处理文件流=>根据文档获取相关参数=>上传文件。
- 第一步主要前端上传功能的处理,可以用来限制文件上传大小(不太准确,根据文件的字节流长度),文件上传类型(根据文件后缀名)。
- 第二步的参数多数都是可以在cos账号后台拿到的。这块参数最好还是存储在后台比较安全。
- 第三步上传我们只需要调用sdk相关接口传入参数即可。只要熟悉了这三个步骤,上传的大部分问题都能解决掉。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。