UNPKG

my-uniapp-tools

Version:

一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能

2 lines (1 loc) 3.57 kB
import{MESSAGES as e}from"./constants.js";import{normalizeHeaders as s,normalizeFormData as i,normalizeUniUploadStatusCode as t,safeJsonParse as o,normalizeExtensions as n,detectPlatform as a,normalizePickFailMessage as r,getExtension as l,createFileId as c}from"./utils.js";function u(s){const{type:i="image",count:t=1,extensions:o}=s,l=n(o);return new Promise(s=>{const o="undefined"==typeof uni?null:uni;if(!o)return void s({success:!1,files:[],message:e.ENV_NOT_SUPPORT_SELECT});const n=a(),c=e=>{s({success:!1,files:[],message:r(e?.errMsg)})},u=[{name:"chooseMedia(image)",when:()=>"image"===i&&"weixin"===n&&"function"==typeof o.chooseMedia,run:()=>{o.chooseMedia({count:t,mediaType:["image"],success:e=>{const i=(Array.isArray(e?.tempFiles)?e.tempFiles:[]).map((e,s)=>{const i=e.size||e.fileSize||e.originalFileSize||0;return m(e.tempFilePath,s,i,"album",n,e)});s({success:!0,files:i})},fail:c})}},{name:"chooseImage",when:()=>"image"===i&&"function"==typeof o.chooseImage,run:()=>{o.chooseImage({count:t,success:e=>{const i=(Array.isArray(e?.tempFiles)?e.tempFiles:e?.tempFiles?[e.tempFiles]:[]).map((e,s)=>m(e.path,s,e.size,"album",n,e));s({success:!0,files:i})},fail:c})}},{name:"chooseFile",when:()=>"image"!==i&&"function"==typeof o.chooseFile,run:()=>{o.chooseFile({count:t,type:"all",extension:l?.map(e=>`.${e}`),success:e=>{const i=(Array.isArray(e?.tempFiles)?e.tempFiles:Array.isArray(e?.tempFilePaths)?e.tempFilePaths:[]).map((e,s)=>"string"==typeof e?m(e,s,0,"file",n,e):m(e?.path||e?.tempFilePath||e?.filePath||"",s,e?.size||e?.fileSize||0,"file",n,e,e?.name));s({success:!0,files:i})},fail:c})}},{name:"chooseMessageFile(all)",when:()=>"function"==typeof o.chooseMessageFile,run:()=>{o.chooseMessageFile({count:t,type:"all",success:e=>{const i=(Array.isArray(e?.tempFiles)?e.tempFiles:[]).map((e,s)=>m(e.path,s,e.size,"file",n,e,e.name));s({success:!0,files:i})},fail:c})}}];for(const e of u)if(e.when())return void e.run();s({success:!1,files:[],message:e.PLATFORM_NOT_SUPPORT_SELECT})})}function m(e,s,i,t,o,n,a){const r="string"==typeof e?e:"",u="string"==typeof a&&a.trim()?a:r.split(/[\\/]/).pop()||`file_${s}`,m="number"==typeof i&&Number.isFinite(i)&&i>0?i:0;return{id:c(s),name:u,size:m,path:r,ext:l(u||r),source:t,platform:o,raw:n}}function f(n,a,r){const{fieldName:l="file",formData:c,headers:u,timeoutMs:m}=a,{signal:f,onProgress:p}=a,g="string"==typeof l&&l.trim()?l:"file",d="number"==typeof m&&Number.isFinite(m)&&m>0?m:void 0,h=s(u),y=i(c),F="function"==typeof p?p:void 0;return new Promise(s=>{const i="undefined"==typeof uni?null:uni;if(!i?.uploadFile)return void s({file:n,success:!1,message:e.ENV_NOT_SUPPORT_UPLOAD});let a=!1,l=null,c=null,u=null;const m=e=>{a||(a=!0,l&&clearTimeout(l),f&&u&&"function"==typeof f.removeEventListener&&(f.removeEventListener("abort",u),u=null),s(e))};d&&d>0&&(l=setTimeout(()=>{c?.abort?.(),m({file:n,success:!1,message:e.UPLOAD_TIMEOUT(d)})},d)),c=i.uploadFile({url:r,filePath:n.path,name:g,header:h,formData:y,success:s=>{const i=t(s),a=i>=200&&i<300,r=o(s.data);m({file:n,success:a,statusCode:i,data:r,message:a?void 0:e.STATUS_CODE_ERROR(i)})},fail:s=>{a||m({file:n,success:!1,message:s?.errMsg||e.UPLOAD_FAILED})}}),F&&c?.onProgressUpdate&&c.onProgressUpdate(e=>{a||"number"!=typeof e.progress||F(n,e.progress)}),f&&"function"==typeof f.addEventListener&&(f.aborted?(c?.abort?.(),m({file:n,success:!1,message:e.UPLOAD_CANCELED})):(u=()=>{c?.abort?.(),m({file:n,success:!1,message:e.UPLOAD_CANCELED})},f.addEventListener("abort",u,{once:!0})))})}export{u as pickFilesInUni,f as uploadFileInUni};