109 lines
2.6 KiB
JavaScript
109 lines
2.6 KiB
JavaScript
import { handleResponse, getCommonReqData } from './manageServer.js'
|
||
import { apiUrls, host } from './api' //接口配置
|
||
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属性显示图片
|
||
var tempFilePaths = res.tempFilePaths || [res.tempFilePath]
|
||
if (tempFilePaths.length > opts.count) {
|
||
reject()
|
||
return showToast(`最多选择${opts.count}个`)
|
||
}
|
||
resolve(tempFilePaths)
|
||
},
|
||
fail: function (res) {
|
||
reject()
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
const doRequest = function (file) {
|
||
return new Promise((resolve, reject) => {
|
||
let comReqData = getCommonReqData()
|
||
uni.uploadFile({
|
||
url: `${host}${apiUrls.uploadFile}`,
|
||
fileType: 'image', // TODO
|
||
filePath: file,
|
||
name: 'file',
|
||
header: {
|
||
...comReqData.header,
|
||
},
|
||
formData: {
|
||
// 'user': 'test'
|
||
},
|
||
success(res) {
|
||
try {
|
||
const data = JSON.parse(res.data)
|
||
handleResponse({ data, resolve, reject })
|
||
} catch (error) {
|
||
reject()
|
||
}
|
||
},
|
||
fail() {
|
||
showToast("文件上传失败")
|
||
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.url
|
||
}).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.url
|
||
})
|
||
allDef.push(def)
|
||
})
|
||
try{
|
||
let resFiles = await Promise.all(allDef)
|
||
uni.hideLoading()
|
||
return resFiles
|
||
}catch(e){
|
||
uni.hideLoading()
|
||
throw Error(e)
|
||
}
|
||
}
|
||
|
||
export {
|
||
coreUploadFile,
|
||
coreMultiUploadFile
|
||
}
|