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