emis-sapp/common/upload.js
2023-12-12 15:00:16 +08:00

104 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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属性显示图片
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) => {
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
}