12345678910 |
- /**
- * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
- * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
- * 保留所有权利 All Rights Reserved.
- * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/storage/service-upload/nova-upload.service.mjs
- */
- import{DatePipe}from"@angular/common";import{Injectable}from"@angular/core";import{Platform}from"@ionic/angular";import{Camera,CameraResultType,CameraSource}from"@capacitor/camera";import{Capacitor}from"@capacitor/core";import{Filesystem}from"@capacitor/filesystem";import{FilesystemWeb}from"@capacitor/filesystem/dist/esm/web.js";import*as qiniu from"qiniu-js";import Parse from"parse";import{Diagnostic}from"@awesome-cordova-plugins/diagnostic/ngx";import CryptoJS from"crypto-js";import{MediaCapture}from"@awesome-cordova-plugins/media-capture/ngx";import{calcFileMd5}from"./util-file-md5";import{getFileMetadata}from"./util-file-metadata";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";import*as i2 from"@awesome-cordova-plugins/diagnostic/ngx";export class NovaUploadService{constructor(e,t){this.platform=e,this.diagnostic=t,this.maxSize=5242880,this.getUptoken(!0),this.requestPermission(),this.queryDomain()}async upload(e,t){let i=e.type,a=e.name?.split("."),o=a[a.length-1],s={id:"",name:"",type:"",size:0,key:"",url:""},r=await this.getFileMd5(e),n=await this.getAttachByMd5(r);if(n?.id)s.url=n?.get("url"),s.name=n?.get("name"),s.type=n?.get("mime"),s.size=n?.get("size"),s.metadata=n?.get("metadata"),t&&t({total:{loaded:s.size,size:s.size,percent:100}});else{let a=this.fileToBlob(e);s=i.indexOf("image")>-1?await this.saveQiniuImageFile(a,o,null,t):await this.saveQiniuMediaFile(e,a,null,t)}s?.url?.indexOf("undefined")>-1&&(s.url=(this.qiniuDomain||"https://file-cloud.fmode.cn/")+s.url.replace("undefined/",""));let l,c=(await getFileMetadata(e)).metadata;return s.metadata||(s.metadata={}),Object.keys(c).forEach((e=>{s.metadata[e]=c[e]})),console.log("metadata",c,s),s?.url&&(l=await this.saveAttachment(s,this.qiniuDomain,null,this.getCompanyId(),e)),l?.id&&(s.id=l?.id),s.attachment=l,s}async getAttachByMd5(e){if(!e)return null;let t=new Parse.Query("Attachment");return t.equalTo("md5",e),t.addDescending("createdAt"),await t.first()}isCapacitor(){return this.platform.is("capacitor")||this.platform.is("cordova")}async getFileMd5(e){let t;try{t=await calcFileMd5(e),console.log("md5File",t)}catch(e){console.error(e)}return t}async requestPermission(){this.isCapacitor()&&(await this.requestStoagePermission(),await this.requestCameraPermission())}async requestStoagePermission(){let e=await this.diagnostic.isExternalStorageAuthorized();if(console.log("permisson_STORAGE:",e),!e){await this.diagnostic.requestExternalStorageAuthorization()}}async requestCameraPermission(){let e=await this.diagnostic.isCameraAuthorized();if(console.log("permisson_Camera:",e),!e){await this.diagnostic.requestCameraAuthorization()}}async getUptoken(e=!1){if(console.log("getUptoken"),this.qiniuConf||e)try{console.log(this.getCompanyId());let e=await Parse.Cloud.run("qiniu_uptoken",{company:this.getCompanyId()});console.log(e),this.qiniuConf=e}catch(e){console.error(e)}}genFileKey(e,t){let i=new Date,a=new DatePipe("en");t||(t=this.getCompanyId());let o="storage/company/"+t+"/";return this.store?.id&&this.store?.id,o+""+(a.transform(i,"yMMdd")+"/"+String(e.id).substr(20,6)+a.transform(i,"hhmmssSSS")+/\.[^\.]+/.exec(e.name))}getCompanyId(){if(this.company)return this.company;return localStorage.getItem("company")}async queryDomain(){let e=new Parse.Query("Company"),t=await e.get(this.getCompanyId());t.get("configQiniu")&&t.get("configQiniu").domain?(console.log(t.get("configQiniu").domain),this.qiniuDomain=t.get("configQiniu").domain):this.qiniuDomain="https://file-cloud.fmode.cn"}async saveAttachment(e,t,i,a,o){e.md5=await this.getFileMd5(o);let s=e.url;s.startsWith("http")||(s=t+s),s=s.replace(/undefined\//,""),a||(a=localStorage.getItem("company"));let r,n=Parse.User.current();if(r?.id)return console.log("fast upload"),r;return r=new(Parse.Object.extend("Attachment")),r.set("size",e.size),r.set("url",s),r.set("name",e.name),r.set("mime",e.type),r.set("md5",e?.md5),r.set("metadata",e?.metadata),this.store?.id&&r.set("store",this.store.toPointer()),n?.id&&r.set("user",n.toPointer()),a&&r.set("company",{__type:"Pointer",className:"Company",objectId:localStorage.getItem("company")}),i&&r.set("category",{__type:"Pointer",className:"Category",objectId:i}),await r.save()}async captureVideo(e){if(this.qiniuConf=e,!this.isCapacitor())return;let t=await this.cameraCaptureVideoFile(),i=await this.getMediaFileDataString(t);return await this.saveQiniuMediaFile(t,i)}async cameraCaptureVideoFile(){let e=MediaCapture,t=await e.captureVideo({limit:1});return t?.length>0?t[0]:null}async getMediaFileDataString(e){new FilesystemWeb,e.fullPath.replaceAll("///","//");let t=await Filesystem.stat({path:e.fullPath}),i=Capacitor.convertFileSrc(t.uri),a=await fetch(i),o=await a.blob();if(console.log(o.size),console.log(JSON.stringify(t)),console.log(JSON.stringify(a)),console.log(JSON.stringify(Object.keys(a))),o)return o;throw"读取文件失败"}async takePicture(e){if(this.qiniuConf=e,!this.isCapacitor())return;await this.getUptoken();let t=await this.cameraTakePictureDataUrl();if(!t?.dataUrl)return;let i=await this.base64ToBlob(t?.dataUrl),a=await this.saveQiniuImageFile(i,t?.format);return console.log(JSON.stringify(a)),a}async cameraTakePictureDataUrl(){if(!this.isCapacitor())return;return await Camera.getPhoto({quality:90,allowEditing:!1,source:CameraSource.Camera,resultType:CameraResultType.DataUrl})}async saveQiniuImageFile(e,t,i,a){let o=this.maxSize;if(e.size>o)throw await console.log("照片过大,超出限制5MB"),"超出文件大小";let s=new DatePipe("en").transform(new Date,"yyyyMMddHHmmss"),r=`${s}.${t}`,n=e.type,l={fname:r,params:{},mimeType:e.type},c={useCdnDomain:!0,forceDirect:!0};console.log(this.qiniuConf);let m=this.genFileKey({id:s,name:r});return console.log("图片上传前"),console.log(m,e,t),new Promise(((t,i)=>{console.log("进入了上传"),qiniu.upload(e,m,this.qiniuConf?.uptoken,l,c).subscribe({next:e=>{console.log(e),a&&a(e)},error:async e=>{console.log(e)},complete:i=>{console.log("上传完成"),console.log(`${this.qiniuConf?.domain}${i.key}`),i.url=`${this.qiniuConf?.domain}${i.key}`,i.name=r,i.type=n,i.size=e.size,t(i)}})}))}async saveQiniuMediaFile(e,t,i,a){let o=e.name,s=e.type;if(e.size>(this.maxSize||104857600))throw console.log("视频过大,超出限制100MB"),"超出文件大小";let r=new DatePipe("en").transform(new Date,"yyyyMMddHHmmss"),n={fname:o,params:{},mimeType:s},l={useCdnDomain:!0,forceDirect:!0},c=this.genFileKey({id:r,name:o});return console.log("图片上传前"),console.log(e.name,t.size),console.log(t.size),console.log(t.size/1024/1024),new Promise(((i,o)=>{console.log("进入了上传"),qiniu.upload(t,c,this.qiniuConf?.uptoken,n,l).subscribe({next:e=>{console.log("主要用来展示进度"),a&&a(e),console.log(JSON.stringify(e))},error:async e=>{console.log("上传失败"),console.log(JSON.stringify(e))},complete:t=>{console.log("上传完成"),console.log(JSON.stringify(t)),e.key=t.key,console.log(e.type),e.url=`${this.qiniuConf?.domain}${t.key}`,console.log(e.url),i(e)}})}))}async base64ToBlobType(e,t){let i=await fetch(`data:${t};base64,${e}`);return await i.blob()}async base64ToBlob(e){let t=await fetch(e);return await t.blob()}fileToBlob(e){const t=e.slice(0,e.size,e.type);return new Blob([t],{type:e.type})}genMd5(e){return CryptoJS.MD5(e).toString()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,deps:[{token:i1.Platform},{token:i2.Diagnostic}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:NovaUploadService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.Platform},{type:i2.Diagnostic}]});
- var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9zdG9yYWdlL3NlcnZpY2UtdXBsb2FkL25vdmEtdXBsb2FkLnNlcnZpY2UubWpz`
-
|