emis-sapp/common/upload.js

104 lines
2.5 KiB
JavaScript
Raw Normal View History

2023-12-12 00:50:19 +00:00
import { handleResponse } from './manageServer.js'
import apiConfig from './api.js' //接口配置
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 05:36:04 +00:00
var tempFilePaths = res.tempFilePaths || [res.tempFilePath]debugger
if (tempFilePaths.length > opts.count) {
reject()
return showToast(`最多选择${opts.count}个`)
}
2023-12-12 00:50:19 +00:00
resolve(tempFilePaths)
},
fail: function (res) {
reject()
}
})
})
}
const doRequest = function (file) {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: `${apiConfig.uploadFile}`,
fileType: 'image', // TODO
filePath: file,
name: 'file',
formData: {
// 'user': 'test'
},
success(res) {
try {
const data = JSON.parse(res.data)
handleResponse(data, resolve, reject)
} catch (error) {
reject()
}
},
fail() {
reject()
}
})
})
}
// 单 选择并上传文件
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 => {
return res
}).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 => {
return res
})
allDef.push(def)
})
try{
let resFiles = await Promise.all(allDef)
uni.hideLoading()
return resFiles
}catch(e){
uni.hideLoading()
return files
}
}
export {
coreUploadFile,
coreMultiUploadFile
}