my-uniapp-tools
Version:
一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能
2 lines (1 loc) • 3.6 kB
JavaScript
"use strict";var e=require("./constants.cjs"),s=require("./utils.cjs");function i(e,i,t,o,n,a,r){const l="string"==typeof e?e:"",c="string"==typeof r&&r.trim()?r:l.split(/[\\/]/).pop()||`file_${i}`,u="number"==typeof t&&Number.isFinite(t)&&t>0?t:0;return{id:s.createFileId(i),name:c,size:u,path:l,ext:s.getExtension(c||l),source:o,platform:n,raw:a}}exports.pickFilesInUni=function(t){const{type:o="image",count:n=1,extensions:a}=t,r=s.normalizeExtensions(a);return new Promise(t=>{const a="undefined"==typeof uni?null:uni;if(!a)return void t({success:!1,files:[],message:e.MESSAGES.ENV_NOT_SUPPORT_SELECT});const l=s.detectPlatform(),c=e=>{t({success:!1,files:[],message:s.normalizePickFailMessage(e?.errMsg)})},u=[{name:"chooseMedia(image)",when:()=>"image"===o&&"weixin"===l&&"function"==typeof a.chooseMedia,run:()=>{a.chooseMedia({count:n,mediaType:["image"],success:e=>{const s=(Array.isArray(e?.tempFiles)?e.tempFiles:[]).map((e,s)=>{const t=e.size||e.fileSize||e.originalFileSize||0;return i(e.tempFilePath,s,t,"album",l,e)});t({success:!0,files:s})},fail:c})}},{name:"chooseImage",when:()=>"image"===o&&"function"==typeof a.chooseImage,run:()=>{a.chooseImage({count:n,success:e=>{const s=(Array.isArray(e?.tempFiles)?e.tempFiles:e?.tempFiles?[e.tempFiles]:[]).map((e,s)=>i(e.path,s,e.size,"album",l,e));t({success:!0,files:s})},fail:c})}},{name:"chooseFile",when:()=>"image"!==o&&"function"==typeof a.chooseFile,run:()=>{a.chooseFile({count:n,type:"all",extension:r?.map(e=>`.${e}`),success:e=>{const s=(Array.isArray(e?.tempFiles)?e.tempFiles:Array.isArray(e?.tempFilePaths)?e.tempFilePaths:[]).map((e,s)=>"string"==typeof e?i(e,s,0,"file",l,e):i(e?.path||e?.tempFilePath||e?.filePath||"",s,e?.size||e?.fileSize||0,"file",l,e,e?.name));t({success:!0,files:s})},fail:c})}},{name:"chooseMessageFile(all)",when:()=>"function"==typeof a.chooseMessageFile,run:()=>{a.chooseMessageFile({count:n,type:"all",success:e=>{const s=(Array.isArray(e?.tempFiles)?e.tempFiles:[]).map((e,s)=>i(e.path,s,e.size,"file",l,e,e.name));t({success:!0,files:s})},fail:c})}}];for(const e of u)if(e.when())return void e.run();t({success:!1,files:[],message:e.MESSAGES.PLATFORM_NOT_SUPPORT_SELECT})})},exports.uploadFileInUni=function(i,t,o){const{fieldName:n="file",formData:a,headers:r,timeoutMs:l}=t,{signal:c,onProgress:u}=t,m="string"==typeof n&&n.trim()?n:"file",f="number"==typeof l&&Number.isFinite(l)&&l>0?l:void 0,p=s.normalizeHeaders(r),d=s.normalizeFormData(a),g="function"==typeof u?u:void 0;return new Promise(t=>{const n="undefined"==typeof uni?null:uni;if(!n?.uploadFile)return void t({file:i,success:!1,message:e.MESSAGES.ENV_NOT_SUPPORT_UPLOAD});let a=!1,r=null,l=null,u=null;const E=e=>{a||(a=!0,r&&clearTimeout(r),c&&u&&"function"==typeof c.removeEventListener&&(c.removeEventListener("abort",u),u=null),t(e))};f&&f>0&&(r=setTimeout(()=>{l?.abort?.(),E({file:i,success:!1,message:e.MESSAGES.UPLOAD_TIMEOUT(f)})},f)),l=n.uploadFile({url:o,filePath:i.path,name:m,header:p,formData:d,success:t=>{const o=s.normalizeUniUploadStatusCode(t),n=o>=200&&o<300,a=s.safeJsonParse(t.data);E({file:i,success:n,statusCode:o,data:a,message:n?void 0:e.MESSAGES.STATUS_CODE_ERROR(o)})},fail:s=>{a||E({file:i,success:!1,message:s?.errMsg||e.MESSAGES.UPLOAD_FAILED})}}),g&&l?.onProgressUpdate&&l.onProgressUpdate(e=>{a||"number"!=typeof e.progress||g(i,e.progress)}),c&&"function"==typeof c.addEventListener&&(c.aborted?(l?.abort?.(),E({file:i,success:!1,message:e.MESSAGES.UPLOAD_CANCELED})):(u=()=>{l?.abort?.(),E({file:i,success:!1,message:e.MESSAGES.UPLOAD_CANCELED})},c.addEventListener("abort",u,{once:!0})))})};