emis-sapp/common/upload.js

111 lines
2.7 KiB
JavaScript
Raw Permalink Normal View History

2024-05-31 10:42:15 +00:00
import { handleResponse, getCommonReqData } from './manageServer.js'
import { apiUrls, host } from './api' //接口配置
2023-12-12 00:50:19 +00:00
import { showToast } from "./untool"
const chooseFile = function (action = 'chooseImage', opt = {}) {
let opts = {
// sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sizeType: ['compressed'],
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
...opt
}
return new Promise((resolve, reject) => {
uni[action]({
count: 1, // 默认9
...opts,
success: function (res) {
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
2023-12-12 07:00:16 +00:00
var tempFilePaths = res.tempFilePaths || [res.tempFilePath]
2023-12-12 05:36:04 +00:00
if (tempFilePaths.length > opts.count) {
reject()
return showToast(`最多选择${opts.count}个`)
}
2023-12-12 00:50:19 +00:00
resolve(tempFilePaths)
},
fail: function (res) {
reject()
}
})
})
}
2024-07-13 17:06:04 +00:00
const doRequest = function (file, opt = {}) {
2023-12-12 00:50:19 +00:00
return new Promise((resolve, reject) => {
2024-05-31 10:42:15 +00:00
let comReqData = getCommonReqData()
2023-12-12 00:50:19 +00:00
uni.uploadFile({
2024-05-31 10:42:15 +00:00
url: `${host}${apiUrls.uploadFile}`,
2023-12-12 00:50:19 +00:00
fileType: 'image', // TODO
filePath: file,
name: 'file',
2024-05-31 10:42:15 +00:00
header: {
...comReqData.header,
},
2023-12-12 00:50:19 +00:00
formData: {
// 'user': 'test'
},
success(res) {
try {
const data = JSON.parse(res.data)
2024-05-31 10:42:15 +00:00
handleResponse({ data, resolve, reject })
2023-12-12 00:50:19 +00:00
} catch (error) {
reject()
}
},
fail() {
2024-05-31 10:42:15 +00:00
showToast("文件上传失败")
2023-12-12 00:50:19 +00:00
reject()
2024-07-13 17:06:04 +00:00
},
...opt
2023-12-12 00:50:19 +00:00
})
})
}
// 单 选择并上传文件
const coreUploadFile = function (action = 'chooseImage', opt = {}) {
return chooseFile(action, opt).then(async (files) => {
if (opt.asyncFileFun) {
const newFiles = await opt.asyncFileFun(files)
files = newFiles
}
uni.showLoading()
return doRequest(files[0]).then(res => {
2024-05-31 10:42:15 +00:00
return res.url
2023-12-12 00:50:19 +00:00
}).finally(()=> {
uni.hideLoading()
})
})
}
// 多 选择并上传文件
const coreMultiUploadFile = async (action = 'chooseImage', opt = {})=> {
let files = await chooseFile(action, opt)
files = files || []
const allDef = []
if (opt.asyncFileFun) {
const newFiles = await opt.asyncFileFun(files)
files = newFiles
}
uni.showLoading()
files.map(val=>{
const def = doRequest(val).then(res => {
2024-05-31 10:42:15 +00:00
return res.url
2023-12-12 00:50:19 +00:00
})
allDef.push(def)
})
try{
let resFiles = await Promise.all(allDef)
uni.hideLoading()
return resFiles
}catch(e){
uni.hideLoading()
2024-05-31 10:42:15 +00:00
throw Error(e)
2023-12-12 00:50:19 +00:00
}
}
export {
coreUploadFile,
2024-07-13 17:06:04 +00:00
coreMultiUploadFile,
doRequest
2023-12-12 00:50:19 +00:00
}