创建新的 pickupFile 方法,分流到 pickupFile2Server 和 pickupFile2Cloud,统一返回 {_state, fileUrl}

This commit is contained in:
陆柯 2021-09-04 11:43:49 +08:00
parent 9e2cff1227
commit a894117881

View File

@ -129,7 +129,7 @@ module.exports = {
async callBackend({ backend = this.BACKEND, httpMethod = 'POST', apiVersion = 'api', apiWho, apiTodo, apiWhat = {} }) {
console.log('👇 < BackendRequest > ', { apiWho, apiTodo, apiWhat }, ' < /BackendRequest > 👇')
let result = {}
if (backend === 'CLOUD') {
if (backend === 'UNICLOUD') {
let { /* success, header, requestedId, */ result: resultCloud = {} } = await uniCloud
.callFunction({
name: apiWho,
@ -182,7 +182,7 @@ module.exports = {
return result
},
async pickupFile({
async pickupFile2Server({
mediaType = 'image',
count = 1,
sizeType = ['original', 'compressed'],
@ -192,11 +192,12 @@ module.exports = {
formData = {},
name = 'file',
} = {}) {
if (uni.getStorageSync('_passtoken')) {
header._passtoken = uni.getStorageSync('_passtoken')
} else {
return [{ _ERROR: 'USER_OFFLINE', errMsg: 'offline user cannot upload files' }, null]
}
// 有的管理后台不需要登录就允许上传,例如 cmctoy。因此不要在这里依赖登录状态。
// if (uni.getStorageSync('_passtoken')) {
// header._passtoken = uni.getStorageSync('_passtoken')
// } else {
// return [{ _ERROR: 'USER_OFFLINE', errMsg: 'offline user cannot upload files' }, null]
// }
let filePath
if (mediaType === 'image') {
@ -216,15 +217,24 @@ module.exports = {
}
uni.showLoading()
let [errorUpload, response] = await uni.uploadFile({ url: this.makeServerUrl(url), filePath, name, header, formData })
let [errorUpload, { data, statusCode } = {}] = await uni.uploadFile({ url: this.makeServerUrl(url), filePath, name, header, formData })
// url 用后台 Multer 处理返回 { _state, filename, originalname, mimetype, size, path },
// uni.uploadFile 存在 data 里返回
uni.hideLoading()
if (response && response.data) {
if (typeof(data)==='string') {
try {
response.data = JSON.parse(response.data)
data = JSON.parse(data)
} catch (exception) {}
}
return [errorUpload, response]
// return [errorUpload, response]
if (data) {
return { _state: 'SUCCESS', file: data }
}else {
return { _state: 'CLIENT_FAIL_UPLOAD_FILE', errorUpload }
}
}else {
return { _state: 'CLIENT_FAIL_CHOOSE_FILE' }
}
return [{ _ERROR: 'USER_CANCELED' }, null]
@ -265,7 +275,7 @@ module.exports = {
// 20200915测试阿里云支持上传 *.mov 了。
if (!/\.(mp4|mov)$/i.test(cloudPath)) cloudPath = cloudPath + '.mp4'
} else {
return { _state: 'UNKNOWN_MEDIA_TYPE' }
return { _state: 'CLIENT_FAIL_UNKNOWN_MEDIA_TYPE' }
}
if (process.env.NODE_ENV === 'development') {
@ -290,7 +300,21 @@ module.exports = {
return { _state: 'SUCCESS', fileID, requestId }
}
}
return { _state: 'FAIL' }
return { _state: 'CLIENT_FAIL_CHOOSE_FILE' }
},
async pickupFile({
backend = this.BACKEND,
mediaType = 'image', count = 1, sizeType = ['original', 'compressed'], sourceType = ['album', 'camera'], maxDuration,
url, header = {}, formData = {}, name = 'file',
}) {
if (backend==='UNICLOUD'){
const resultCloud = await this.pickupFile2Cloud({mediaType, count, sizeType, sourceType, maxDuration })
return Object.assign(resultCloud, { fileUrl: resultCloud.fileID })
}else if (backend==='SERVER' && url){
const resultServer = await this.pickupFile2Server({mediaType, count, sizeType, sourceType, maxDuration, url, header, formData, name})
return Object.assign(resultServer, {fileUrl: resultServer.file ? this.makeBgUrl(resultServer.file.filename) : undefined})
}
},
openUrl(url) {