vue-cloud-upload
Version:
基于vue+elementui的通用云上传组件,无缝衔接腾讯云,华为云,火山云等桶平台,开箱即用
6 lines (5 loc) • 23.6 kB
JavaScript
(function(d,a){typeof exports=="object"&&typeof module!="undefined"?a(exports,require("vue"),require("element-ui")):typeof define=="function"&&define.amd?define(["exports","vue","element-ui"],a):(d=typeof globalThis!="undefined"?globalThis:d||self,a(d.CloudUpload={},d.Vue,d.ElementUI))})(this,(function(d,a,u){"use strict";var te=Object.defineProperty,ie=Object.defineProperties;var se=Object.getOwnPropertyDescriptors;var J=Object.getOwnPropertySymbols;var ne=Object.prototype.hasOwnProperty,re=Object.prototype.propertyIsEnumerable;var D=(d,a,u)=>a in d?te(d,a,{enumerable:!0,configurable:!0,writable:!0,value:u}):d[a]=u,k=(d,a)=>{for(var u in a||(a={}))ne.call(a,u)&&D(d,u,a[u]);if(J)for(var u of J(a))re.call(a,u)&&D(d,u,a[u]);return d},W=(d,a)=>ie(d,se(a));var g=(d,a,u)=>D(d,typeof a!="symbol"?a+"":a,u);var y=(d,a,u)=>new Promise((m,$)=>{var R=x=>{try{O(u.next(x))}catch(U){$(U)}},L=x=>{try{O(u.throw(x))}catch(U){$(U)}},O=x=>x.done?m(x.value):Promise.resolve(x.value).then(R,L);O((u=u.apply(d,a)).next())});class m{static getFileExtension(e){return(typeof e=="string"?e:e.name).split(".").pop().toLowerCase()}static getFileSizeMB(e){return parseFloat((e.size/(1024*1024)).toFixed(2))}static getFileSizeAuto(e){const t=e.size;return t<1024?t+" B":t<1048576?(t/1024).toFixed(2)+" KB":t<1073741824?(t/1048576).toFixed(2)+" MB":(t/1073741824).toFixed(2)+" GB"}static checkFileType(e,t){const i=m.getFileExtension(e);return t.includes(i)}static generatePreviewURL(e){return new Promise((t,i)=>{const n=new FileReader;n.onload=o=>t(o.target.result),n.onerror=o=>i(o),n.readAsDataURL(e)})}static downloadFile(e,t){let i="";if(t)i=t;else{const n=decodeURIComponent(e);i=n.substring(n.lastIndexOf("/")+1).split("?")[0]}fetch(e).then(n=>n.blob()).then(n=>{const o=document.createElement("a");o.href=URL.createObjectURL(n),o.download=i,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(o.href)}).catch(n=>console.error("下载失败:",n))}static getFileType(e){let t="";if(e.name&&e.name!="")t=m.getFileExtension(e);else{if(!e.url)return"other";t=m.getFileExtension(e.url)}if(m.getIfImage(e))return"image";let i="";switch(t){case"doc":case"docx":i="word";break;case"pdf":i="pdf";break;case"ppt":case"pptx":i="ppt";break;case"xls":case"xlsx":case"csv":i="excel";break;case"rar":case"zip":case"7z":case"gzip":case"tar":i="rar";break;case"mp4":case"webm":case"ogg":case"mpeg":i="video";break;case"mp3":case"aac":case"wav":case"flac":case"opus":i="audio";break;case"txt":i="txt";break;default:i="other";break}return i}static getIfImage(e){let t="";if(e.name&&e.name!="")t=m.getFileExtension(e);else{if(!e.url)return!1;t=m.getFileExtension(e.url)}return["png","jpg","jpeg","bmp","gif","webp","svg"].some(n=>n===t)}static getFileName(e){if(e.name)return e.name;if(e.url&&e.url!=""){const t=decodeURIComponent(e.url);return t.substring(t.lastIndexOf("/")+1).split("?")[0]}else return""}}function $(s,e,t,i,n,o,c,l){var h=typeof s=="function"?s.options:s;return e&&(h.render=e,h.staticRenderFns=t,h._compiled=!0),o&&(h._scopeId="data-v-"+o),{exports:s,options:h}}const R={props:{visible:{type:Boolean},file:{type:Object,required:!0}},data(){return{currentVisible:this.visible,fileType:"",fileName:"",fileRaw:null,pdfUrl:"",fileContent:"",loading:!1,fullscreen:!1}},computed:{formattedText(){return this.fileContent.replace(/\n/g,"<br>")},dialogWidth(){return this.fileType=="audio"?"30%":"75%"}},methods:{handleOpen(){},handleClose(){this.$emit("update:visible",!1)},initTxtContent(){if(!this.fileRaw)return;const s=new FileReader;s.onload=e=>{this.fileContent=e.target.result},s.readAsText(this.fileRaw)},initPdfContent(){this.pdfUrl=URL.createObjectURL(this.fileRaw)}},watch:{visible(s){this.currentVisible=s},file:function(s){return y(this,null,function*(){if(this.loading=!0,this.fileName=m.getFileName(s),this.fileType=m.getFileType(s),s.raw&&s.raw instanceof File)this.fileRaw=s.raw;else if(this.fileType=="txt"||this.fileType=="pdf")try{const t=yield(yield fetch(s.url)).blob();this.fileRaw=t}catch(e){console.error("文件下载失败:",e);return}switch(this.fileType){case"txt":this.initTxtContent();break;case"pdf":this.initPdfContent();break}this.loading=!1})}}};var L=function(){var e=this,t=e._self._c;return t("el-dialog",{attrs:{visible:e.currentVisible,title:e.fileName,"custom-class":"file-preview-dialog","append-to-body":"",fullscreen:e.fullscreen,width:e.dialogWidth},on:{"update:visible":function(i){e.currentVisible=i},open:e.handleOpen,close:e.handleClose},scopedSlots:e._u([{key:"title",fn:function(){return[t("div",{staticClass:"dialog-header"},[t("span",[e._v(e._s(e.fileName))]),t("i",{class:["preview-header-icon",e.fullscreen?"el-icon-copy-document":"el-icon-full-screen"],on:{click:function(i){e.fullscreen=!e.fullscreen}}})])]},proxy:!0}])},[t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],class:["file-preview-content",e.fileType=="audio"?"preview-audio":""]},[e.fileType=="txt"?t("div",{domProps:{innerHTML:e._s(e.formattedText)}}):e._e(),e.fileType=="pdf"?t("iframe",{staticClass:"pdf-container",attrs:{src:e.pdfUrl,frameborder:"0"}}):e._e(),e.fileType=="video"&&e.currentVisible?t("video",{ref:"cloud-upload-video",attrs:{controls:"",src:e.file.url,autoplay:"",preload:"auto",crossorigin:""}}):e._e(),e.fileType=="audio"&&e.currentVisible?t("audio",{attrs:{controls:"",src:e.file.url,autoplay:"",preload:"auto",crossorigin:""}}):e._e()])])},O=[],x=$(R,L,O,!1,null,"ab02c2c8");const U=x.exports,G="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";let M=(s=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(s|=0));for(;s--;)e+=G[t[s]&63];return e},K=null,P=null;a.component("el-upload",u.Upload),a.component("el-image",u.Image),a.component("el-tooltip",u.Tooltip),a.component("el-dialog",u.Dialog),a.use(u.Loading.directive);const X={name:"CloudUpload",inheritAttrs:!1,props:{multiple:{type:Boolean,default:!1},showFileList:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},accept:{type:String},listType:{type:String,default:"picture-card",validator:s=>{const e=["text","picture","picture-card"];return e.includes(s)?!0:(console.error(`listType参数必须是以下值之一: ${e.join(", ")}
当前值: "${s}"将回退到默认值"picture-card"`),!1)}},disabled:{type:Boolean,default:!1},limit:{type:Number},maxSize:{type:Number},size:{type:String,default:"small",validator:s=>{const e=["medium","small","mini"];return e.includes(s)?!0:(console.error(`listType参数必须是以下值之一: ${e.join(", ")}
当前值: "${s}"将回退到默认值"small"`),!1)}},sliceSize:{type:Number,default:1024*1024*10},chunkSize:{type:Number,default:1024*1024*5},fileKey:{type:String,default:"uuid+name",validator:s=>{const e=["uuid","name","uuid+name"];return e.includes(s)?!0:(console.error(`listType参数必须是以下值之一: ${e.join(", ")}
当前值: "${s}"将回退到默认值"uuid+name"`),!1)}},cloudType:{type:String,default:"tencent",validator:s=>{const e=["tencent","huawei"];return e.includes(s)?!0:(console.error(`listType参数必须是以下值之一: ${e.join(", ")}
当前值: "${s}"将回退到默认值"tencent"`),!1)}},cloudConfig:{type:Object,required:!0,default:()=>({bucket:"",region:"",path:"",getTempCredential:()=>({TmpSecretId:"",TmpSecretKey:"",SecurityToken:"",StartTime:"",ExpiredTime:""})})},previewConfig:{type:Object,required:!1},value:{type:Array,default:()=>{}},beforeUpload:{type:Function,required:!1},onExceed:{type:Function,required:!1}},data(){return{fileList:this.value,previewUrl:"",previewVisible:!1,previewFile:{}}},computed:{getPreviewList(){let s=[];return this.fileList.forEach(e=>{this.getIfImage(e)&&s.push(e.url)}),s},getPreviewConfig(){return Object.assign({image:!0,video:!0,audio:!0,word:!1,excel:!1,ppt:!1,txt:!0,pdf:!0,rar:!1},this.previewConfig)}},created(){this.checkAndInit(this.cloudConfig)},beforeDestroy(){K.destroyInstance()},methods:{checkAndInit(s){return y(this,null,function*(){const e=["tencent","huawei"];switch(this.cloudType?e.includes(this.cloudType)||console.warn(`云平台类型cloudType设置错误,应为${e.join("/")}`):console.warn("未设置云平台类型cloudType!"),this.cloudType){case"tencent":K=(yield Promise.resolve().then(()=>V)).default,K.getInstance(s);break;case"huawei":P=(yield Promise.resolve().then(()=>q)).default,P.getInstance(s)}})},getImgRef(s){return`previewImg${this.getPreviewList.findIndex(e=>e==s.url)}`},getFileName(s){return m.getFileName(s)},getIfImage(s){return m.getIfImage(s)},getFileType(s){return m.getFileType(s)},getFileIcon(s){const e=this.getFileType(s);return{image:"",video:"icon-video",audio:"icon-audio",rar:"icon-yasuobao",word:"icon-WORD",excel:"icon-EXCEL",ppt:"icon-ppt",txt:"icon-txt",pdf:"icon-Pdf",other:"icon-fujian1"}[e]},getFileLoading(s){var t;if(!((t=this.$refs.innerUpload)!=null&&t.uploadFiles))return!1;const e=this.$refs.innerUpload.uploadFiles.find(i=>i.uid==s.uid||i.url==s.url);return e?!!(e.percentage&&e.percentage<1):!1},getFilePercent(s){var t;if(!((t=this.$refs.innerUpload)!=null&&t.uploadFiles))return"";const e=this.$refs.innerUpload.uploadFiles.find(i=>i.uid==s.uid||i.url==s.url);return e?e.percentage&&e.percentage<1?`上传中${Math.round(e.percentage*1e3)/10}%`:"上传完成":""},customUpload(s){return y(this,null,function*(){const{file:e,onProgress:t,onSuccess:i,onError:n}=s;let o=this.generateKey(e.name);const c=W(k({file:e,key:o,chunkSize:this.chunkSize,sliceSize:this.sliceSize},this.cloudConfig),{onProgress:l=>{console.log("当前进度:",l),t({percent:l}),this.$emit("progress",l,e)}});try{let l;switch(this.cloudType){case"tencent":if(l=yield K.getInstance().uploadFile(c),l.statusCode==200){const h=this.$refs.innerUpload.uploadFiles.findIndex(p=>p.uid==e.uid);let r=this.$refs.innerUpload.uploadFiles[h];const f=Object.assign(r,{url:l.url,result:l});this.$refs.innerUpload.uploadFiles.splice(h,1,f),this.fileList=this.$refs.innerUpload.uploadFiles}break;case"huawei":if(l=yield P.getInstance().uploadFile(c),l.CommonMsg.Status==200){const h=this.$refs.innerUpload.uploadFiles.findIndex(p=>p.uid==e.uid);let r=this.$refs.innerUpload.uploadFiles[h];const f=Object.assign(r,{url:l.url,result:l});this.$refs.innerUpload.uploadFiles.splice(h,1,f),this.fileList=this.$refs.innerUpload.uploadFiles}break;default:throw new Error(`Unsupported cloudType: ${this.cloudType}`)}i(l,e),this.$emit("success",l,e),this.$emit("input",this.fileList)}catch(l){n(l,e),this.$emit("error",l,e)}})},generateKey(s){let e="";switch(this.fileKey){case"name":e=`${this.cloudConfig.path}${s}`;break;case"uuid":const t=m.getFileExtension(s);e=`${this.cloudConfig.path}${M()}.${t}`;break;case"uuid+name":e=`${this.cloudConfig.path}${M()}/${s}`;break}return e},onbeforeUpload(s){if(this.beforeUpload&&typeof this.beforeUpload=="function")return this.beforeUpload();{let e=!0;if(this.accept){const i=this.accept.split(",").map(n=>n.replace(".",""));e=m.checkFileType(s,i)}const t=this.maxSize?m.getFileSizeMB(s)<this.maxSize:!0;return e?t?!0:(this.$message.error(`文件大小不能超过 ${this.maxSize}MB!`),!1):(this.$message.error(`文件类型必须是 ${this.accept} 中的一种!`),!1)}},handleRemove(s,e){this.fileList=this.fileList.filter(t=>t.uid!=s.uid&&t.url!=s.url),this.$emit("input",this.fileList)},handlePreview(s){if(this.onPreview&&typeof this.onPreview=="function")this.onPreview(s);else if(this.getFileType(s)=="image"){const t=this.getImgRef(s);this.$refs[t].clickHandler()}else this.previewFile=s,this.previewVisible=!0},handleDown(s){this.$message.success("文件开始下载,请稍等!"),m.downloadFile(s.url,s.name)},handleExceed(s,e){this.onExceed&&typeof this.onExceed=="function"?this.onExceed(s,e):this.$message.warning(`当前限制最多选择${this.limit}个文件!`)}},watch:{value(s){this.fileList=s},cloudType(s){this.checkAndInit(this.cloudConfig)},cloudConfig:{deep:!0,handler(s){this.checkAndInit(s)}}},components:{FilePreview:U}};var Q=function(){var e=this,t=e._self._c;return t("div",{class:["cloud-upload","cloud-upload-"+e.size]},[t("el-upload",e._g(e._b({ref:"innerUpload",attrs:{action:"#","file-list":e.fileList,multiple:e.multiple,accept:e.accept,limit:e.limit,drag:e.drag,"show-file-list":e.showFileList,"on-exceed":e.handleExceed,"on-remove":e.handleRemove,"on-preview":e.handlePreview,"before-upload":e.onbeforeUpload,"http-request":e.customUpload,"list-type":e.listType},scopedSlots:e._u([{key:"file",fn:function({file:i}){return!e.$scopedSlots.file&&e.listType=="picture-card"?[e.getIfImage(i)?t("el-image",{directives:[{name:"loading",rawName:"v-loading",value:e.getFileLoading(i),expression:"getFileLoading(file)"}],ref:e.getImgRef(i),staticClass:"el-upload-list__item-thumbnail",attrs:{"preview-src-list":e.getPreviewList,fit:"contain","element-loading-text":e.getFilePercent(i),src:i.url}}):t("div",{directives:[{name:"loading",rawName:"v-loading",value:e.getFileLoading(i),expression:"getFileLoading(file)"}],staticClass:"el-upload-list__item-thumbnail previewIcon",attrs:{"element-loading-text":e.getFilePercent(i)}},[t("i",{class:["cloud-upload-icon",e.getFileIcon(i)]})]),t("span",{staticClass:"el-upload-list__item-actions"},[e.getPreviewConfig[e.getFileType(i)]&&i.status=="success"?t("span",{staticClass:"el-upload-list__item-preview"},[t("i",{staticClass:"el-icon-view",on:{click:()=>e.handlePreview(i)}})]):e._e(),t("span",{staticClass:"el-upload-list__item-delete"},[t("i",{staticClass:"el-icon-download",on:{click:()=>e.handleDown(i)}})]),e.disabled?e._e():t("span",{staticClass:"el-upload-list__item-delete",on:{click:()=>e.handleRemove(i)}},[t("i",{staticClass:"el-icon-delete"})])]),t("el-tooltip",{staticClass:"item",attrs:{effect:"light",content:e.getFileName(i),placement:"top"}},[t("span",{staticClass:"file-name",on:{click:()=>e.handleDown(i)}},[e._v(e._s(e.getFileName(i)))])])]:void 0}}],null,!0)},"el-upload",e.$attrs,!1),e.$listeners),[e.$scopedSlots.default?e._e():[e.listType=="picture-card"?t("div",{staticClass:"default-content"},[t("i",{staticClass:"el-icon-upload",attrs:{slot:"default"},slot:"default"}),t("span",{directives:[{name:"show",rawName:"v-show",value:!e.disabled,expression:"!disabled"}]},[e._v("点击上传")])]):t("el-button",{attrs:{size:e.size,type:"primary"}},[e._v("点击上传")])],e._l(e.$scopedSlots,function(i,n){return[e._t(n,null,null,e.scoped)]})],2),t("FilePreview",{attrs:{visible:e.previewVisible,file:e.previewFile},on:{"update:visible":function(i){e.previewVisible=i}}})],1)},Y=[],Z=$(X,Q,Y,!1,null,"09ed794e");const F=Z.exports;function H(s){Promise.resolve().then(()=>V).then(e=>{e.default.setExternalCOS(s)})}function ee(s){Promise.resolve().then(()=>q).then(e=>{e.default.setExternalOBS(s)})}F.install=function(s){s.component(F.name,F)},typeof window!="undefined"&&window.Vue&&window.Vue.component(F.name,F);const _=class _{constructor(e){g(this,"cosClient",null);g(this,"tempCredential",null);g(this,"secretId",null);g(this,"secretKey",null);e&&e.secretId&&e.secretKey&&(this.secretId=e.secretId,this.secretKey=e.secretKey),this.initClient(e)}static setExternalCOS(e){this.externalCOS=e}static getInstance(e){return this.instance||e&&(e.secretId&&e.secretKey||e.getTempCredential&&typeof e.getTempCredential=="function")&&(this.instance=new _(e)),this.instance}static destroyInstance(){this.instance=null,this.cosClient=null,this.tempCredential=null,localStorage.removeItem("cosCredential")}initClient(e){return y(this,null,function*(){let t=_.externalCOS;if(this.secretId&&this.secretKey)this.cosClient=new t({SecretId:this.secretId,SecretKey:this.secretKey});else{const i=e.getTempCredential;yield this.getTempCredential(i),this.cosClient=new t({getAuthorization:(n,o)=>y(this,null,function*(){try{(!this.tempCredential||this.isCredentialExpired())&&(yield this.getTempCredential(i)),o({TmpSecretId:this.tempCredential.tmpSecretId,TmpSecretKey:this.tempCredential.tmpSecretKey,SecurityToken:this.tempCredential.sessionToken,StartTime:this.tempCredential.startTime,ExpiredTime:this.tempCredential.expiredTime})}catch(c){console.error("获取临时凭证失败:",c)}})})}})}getTempCredential(e){return y(this,null,function*(){let t=localStorage.getItem("cosCredential");if(t&&(t=JSON.parse(t)),t&&!this.isCredentialExpired(t)){this.tempCredential=t;return}try{const i=yield e();i&&typeof i=="object"&&(this.tempCredential={tmpSecretId:i.credentials.tmpSecretId,tmpSecretKey:i.credentials.tmpSecretKey,sessionToken:i.credentials.sessionToken,startTime:i.startTime,expiredTime:i.expiredTime},localStorage.setItem("cosCredential",JSON.stringify(this.tempCredential)))}catch(i){throw new Error("获取临时凭证失败: "+i.message)}})}isCredentialExpired(e=this.tempCredential){return e?Math.floor(Date.now()/1e3)>=e.expiredTime-60:!0}uploadFile({bucket:e,region:t,key:i,file:n,sliceSize:o,chunkSize:c,onProgress:l}){return new Promise((h,r)=>y(this,null,function*(){const f=yield this.isBucketPublicRead({bucket:e,region:t});this.cosClient.uploadFile({Bucket:e,Region:t,Key:i,Body:n,SliceSize:o,ChunkSize:c,onProgress:p=>{l&&typeof l=="function"&&l(p.percent)}},(p,v)=>{if(p)r(p);else if(f){const T=v.Location.startsWith("https://")?v.Location:"https://"+v.Location;h(k({url:T,key:i,name:n.name},v))}else this.cosClient.getObjectUrl({Bucket:e,Region:t,Key:i,Sign:!0},function(T,C){T?console.log(T):h(k({url:C.Url,key:i,name:n.name},v))})})}))}addWatermark(o){return y(this,arguments,function*({bucket:e,region:t,key:i,watermarkText:n}){const c={Bucket:e,Region:t,Key:i,PicOperations:JSON.stringify({is_pic_info:1,rules:[{fileid:`watermark_${i}`,rule:`watermark/2/text/${encodeURIComponent(n)}/fill/IzAwMDAwMA/fontsize/20/dissolve/50/gravity/southeast/dx/20/dy/20`}]})};return new Promise((l,h)=>{this.cosClient.ciPutObjectFromLocalFile(c,(r,f)=>{r?h(r):l(f)})})})}getBucketAcl(i){return y(this,arguments,function*({bucket:e,region:t}){return new Promise((n,o)=>{this.cosClient.getBucketAcl({Bucket:e,Region:t},(c,l)=>{c?o(c):n(l)})})})}isBucketPublicRead(i){return y(this,arguments,function*({bucket:e,region:t}){try{return(yield this.getBucketAcl({bucket:e,region:t})).Grants.some(o=>o.Grantee.URI==="http://cam.qcloud.com/groups/global/AllUsers"&&o.Permission==="READ")}catch(n){return console.error("检查存储桶权限失败:",n),!0}})}};g(_,"instance",null),g(_,"externalCOS",null);let B=_;const V=Object.freeze(Object.defineProperty({__proto__:null,default:B},Symbol.toStringTag,{value:"Module"})),S=class S{constructor(e){g(this,"obsClient",null);g(this,"tempCredential",null);g(this,"accessKeyId",null);g(this,"secretAccessKey",null);g(this,"securityToken",null);g(this,"server",null);e&&e.server&&(this.server=e.server),e&&e.accessKeyId&&e.secretAccessKey&&(this.accessKeyId=e.accessKeyId,this.secretAccessKey=e.secretAccessKey),this.initClient(e)}static setExternalOBS(e){this.externalOBS=e}static getInstance(e){return this.instance||e&&(e.accessKeyId&&e.secretAccessKey&&!e.getTempCredential||e.getTempCredential&&typeof e.getTempCredential=="function")&&(this.instance=new S(e)),this.instance}static destroyInstance(){this.instance=null,this.obsClient=null,this.tempCredential=null,localStorage.removeItem("obsCpDatas"),localStorage.removeItem("obsCredential")}initClient(e){return y(this,null,function*(){let t=S.externalOBS;if(this.accessKeyId&&this.secretAccessKey&&!e.getTempCredential)this.obsClient=new t({access_key_id:this.accessKeyId,secret_access_key:this.secretAccessKey,server:this.server});else if(e.getTempCredential)yield this.getTempCredential(e.getTempCredential),this.obsClient=new t({access_key_id:this.tempCredential.accessKeyId,secret_access_key:this.tempCredential.secretAccessKey,security_token:this.tempCredential.securityToken,server:this.server});else throw new Error("缺少必要的认证信息:需要提供永久密钥或getTempCredential函数");this.obsClient.initLog({level:"warn"})})}getTempCredential(e){return y(this,null,function*(){let t=localStorage.getItem("obsCredential");if(t&&(t=JSON.parse(t)),t&&!this.isCredentialExpired(t)){this.tempCredential=t;return}try{const i=yield e();i&&typeof i=="object"&&(this.tempCredential={accessKeyId:i.credential.access,secretAccessKey:i.credential.secret,securityToken:i.credential.securitytoken,expiredTime:i.credential.expires_at},localStorage.setItem("obsCredential",JSON.stringify(this.tempCredential)))}catch(i){throw new Error("获取临时凭证失败: "+i.message)}})}isCredentialExpired(e=this.tempCredential){if(!e)return!0;const t=Date.now(),i=Date.parse(e.expiredTime);return t>=i-60*1e3}ensureValidCredential(e){return y(this,null,function*(){if(e&&(!this.tempCredential||this.isCredentialExpired())){yield this.getTempCredential(e);let t=S.externalOBS;this.obsClient=new t({access_key_id:this.tempCredential.accessKeyId,secret_access_key:this.tempCredential.secretAccessKey,security_token:this.tempCredential.securityToken,server:this.server})}})}uploadFile(h){return y(this,arguments,function*({bucket:e,key:t,file:i,sliceSize:n,chunkSize:o,onProgress:c,getTempCredential:l}){if(yield this.ensureValidCredential(l),i.size<n)try{const r=yield this.obsClient.putObject({Bucket:e,Key:t,SourceFile:i,ProgressCallback:(f,p,v)=>{c&&typeof c=="function"&&c(f/p)}});if(r.CommonMsg.Status<300){const f=yield this.obsClient.getObject({Bucket:e,Key:t,SaveByType:"file"});let p="";if(f.CommonMsg.Status<300&&f.InterfaceResult)p=f.InterfaceResult.Content.SignedUrl;else throw new Error(`附件url获取失败: ${f.CommonMsg.Code}`);return k({url:p,key:t,name:i.name},r)}else throw new Error(`上传失败: ${r.CommonMsg.Code}`)}catch(r){throw new Error(`华为云OBS上传失败: ${r.message}`)}else try{let r=[];const f=localStorage.getItem("obsCpDatas");f&&(r=JSON.parse(f));const p=`${i.name}-${i.size}-${i.lastModified}`,v=r.findIndex(w=>w.key==p),T=v>=0;let C=T?r[v].cp:null,E;if(C?(C.sourceFile=i,E=yield this.obsClient.uploadFile({UploadCheckpoint:C,ProgressCallback:(w,b,z)=>{c&&typeof c=="function"&&c(w/b)},EventCallback:function(w,b,z){if(w=="uploadPartSucceed"){const j=r.findIndex(I=>I.key==p),A=C.parts.findIndex(I=>I.partNumber==b.partNumber);C.parts[A].isCompleted=!0,r[j].cp=C,localStorage.setItem("obsCpDatas",JSON.stringify(r))}}})):E=yield this.obsClient.uploadFile({Bucket:e,Key:t,SourceFile:i,PartSize:o,ProgressCallback:(w,b,z)=>{c&&typeof c=="function"&&c(w/b)},ResumeCallback:function(w,b){console.log("记录断点:",b),C=b,T?r[v].cp=C:(r.push({key:p,cp:C}),localStorage.setItem("obsCpDatas",JSON.stringify(r)))},EventCallback:function(w,b,z){if(w=="uploadPartSucceed"){const j=r.findIndex(I=>I.key==p),A=C.parts.findIndex(I=>I.partNumber==b.partNumber);C.parts[A].isCompleted=!0,r[j].cp=C,localStorage.setItem("obsCpDatas",JSON.stringify(r))}}}),E.CommonMsg.Status<300){const w=r.findIndex(b=>b.key==p);return r.splice(w,1),localStorage.setItem("obsCpDatas",JSON.stringify(r)),k({key:t,name:i.name},E)}else throw new Error(`上传失败: ${E.CommonMsg.Code}`)}catch(r){throw new Error(`华为云OBS上传失败: ${r.message}`)}})}addWatermark(o){return y(this,arguments,function*({bucket:e,region:t,key:i,watermarkText:n}){try{return{processedUrl:`https://${e}.obs.${t}.myhuaweicloud.com/${i}?x-image-process=image/watermark,text_${encodeURIComponent(n)},color_FFFFFF,size_20,g_se,x_20,y_20`,originalKey:i}}catch(c){throw new Error(`添加水印失败: ${c.message}`)}})}};g(S,"instance",null),g(S,"externalOBS",null);let N=S;const q=Object.freeze(Object.defineProperty({__proto__:null,default:N},Symbol.toStringTag,{value:"Module"}));d.default=F,d.setExternalCOS=H,d.setExternalOBS=ee,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));