diff --git a/index.js b/index.js index 6f7393f..85eff09 100644 --- a/index.js +++ b/index.js @@ -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) {