import Taro from '@tarojs/taro'; /** * 文件上传 * @param response * @param resolve * @param reject * @param url * @param token */ const uploadFile = async ( response, resolve, reject, maxSize, url, token, allowTypes, ) => { let toUploadPath = response.tempFilePaths[0]; if (!checkFiles(response.tempFiles[0], maxSize, allowTypes)) { return; } await Taro.uploadFile({ url: url, header: { Authorization: token, }, filePath: toUploadPath, formData: {}, name: 'uploadFile', success: async function(result) { const data = JSON.parse(result.data); resolve({ context: data.context }); }, fail: async function(result) { setTimeout(async () => { await Taro.showToast({ title: 'fail: ' + JSON.stringify(result || {}) + '-' + toUploadPath, icon: 'none', duration: 3000, }); }, 3000); reject(result); }, }); }; /** * h5文件上传 * @param resolve * @param reject * @param maxSize * @param url * @param token */ const h5Upload = ( resolve, reject, maxSize, url, token, allowTypes, chooseCallback, ) => { (document.getElementById('uploadForm') as any).reset(); const uploadInput = document.getElementById('uploadInput'); if (!!uploadInput) { uploadInput.onchange = async (e: any) => { let files = e.target.files; if (!checkFiles(files[0], maxSize, allowTypes)) { return; } chooseCallback(); if (files && files[0]) { let formData = new FormData(); formData.append('uploadFile', files[0]); fetch(url, { method: 'POST', body: formData, headers: { Authorization: token, }, }) .then((res) => res.json()) .then((res) => resolve({ context: res.context })) .catch((err) => reject(err)); } }; uploadInput.click(); } }; /** * 校验 * @param file * @param maxSize */ const checkFiles = (file, maxSize, allowTypes) => { let fileName = file.name || file.path; let typeCheck = false; allowTypes.map((type) => { if (fileName.endsWith(type)) { typeCheck = true; } }); //判断是否 是标准格式,是否超过文件大小 if (typeCheck) { if (file.size >= maxSize * 1024 * 1024) { Taro.showToast({ title: `图片大小不能超过${maxSize}M`, icon: 'none', duration: 1000, }); return false; } } else { Taro.showToast({ title: `仅支持${allowTypes.join(',')}文件`, icon: 'none', duration: 1000, }); return false; } return true; }; export default { h5Upload, uploadFile };