return _msg if pickupFile failes
				
					
				
			This commit is contained in:
		
							parent
							
								
									8a2048af22
								
							
						
					
					
						commit
						24bc21cc5d
					
				
							
								
								
									
										58
									
								
								unitool.js
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								unitool.js
									
									
									
									
									
								
							@ -296,39 +296,42 @@ export default {
 | 
			
		||||
    let filePath, fileSize
 | 
			
		||||
    if (mediaType === 'image') {
 | 
			
		||||
      let [errorChoose, { tempFilePaths, tempFiles } = {}] = await uni.chooseImage({ count, sizeType, sourceType })
 | 
			
		||||
      if (errorChoose) {
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE', _msg: { zhCN: '图像选择失败。请稍后再试,或向客服投诉。', enUS: 'Image choose failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
      }
 | 
			
		||||
      fileSize = tempFiles?.[0]?.size
 | 
			
		||||
      filePath = tempFilePaths?.[0]
 | 
			
		||||
    } else if (mediaType === 'video') {
 | 
			
		||||
      let [errorChoose, { tempFilePath, size, duration }] = await uni.chooseVideo({ sourceType })
 | 
			
		||||
      if (errorChoose) {
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE', _msg: { zhCN: '视频选择失败。请稍后再试,或向客服投诉。', enUS: 'Video choose failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
      }
 | 
			
		||||
      fileSize = size
 | 
			
		||||
      filePath = tempFilePath
 | 
			
		||||
    } else {
 | 
			
		||||
      // #ifdef WEB
 | 
			
		||||
      // https://uniapp.dcloud.net.cn/api/media/file.html
 | 
			
		||||
      let [errorChoose, { tempFilePaths, tempFiles } = {}] = await uni.chooseFile({ count, extension: Array.isArray(mediaType) ? mediaType : undefined, type: Array.isArray(mediaType) ? undefined : 'all' }) // 20240429 但是测试下来 extension 参数无效
 | 
			
		||||
      if (errorChoose) {
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE', _msg: { zhCN: '文件选择失败。请稍后再试,或向客服投诉。', enUS: 'File choose failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
      }
 | 
			
		||||
      fileSize = tempFiles?.[0]?.size
 | 
			
		||||
      filePath = tempFilePaths?.[0]
 | 
			
		||||
      let fileExt = path.extname(tempFiles?.[0]?.name?.toLowerCase?.() || '')
 | 
			
		||||
      if (Array.isArray(mediaType) && !mediaType?.includes?.(fileExt)) {
 | 
			
		||||
        console.log('pickupFile2Server: UNSUPPORTED_FILETYPE ' + fileExt)
 | 
			
		||||
        this.showToast({ type: this.c2t.RED, title: { zhCN: '不支持的文件后缀\n' + fileExt, enUS: 'Unsupported file extension\n' + fileExt } })
 | 
			
		||||
        return { _state: 'UNSUPPORTED_FILETYPE' }
 | 
			
		||||
        return { _state: 'UNSUPPORTED_FILETYPE', _msg: { zhCN: '不支持的文件后缀\n' + fileExt, enUS: 'Unsupported file extension\n' + fileExt } }
 | 
			
		||||
      }
 | 
			
		||||
      // #endif
 | 
			
		||||
      // #ifndef WEB
 | 
			
		||||
      return { _state: 'UNSUPPORTED_FILETYPE' }
 | 
			
		||||
      return { _state: 'UNSUPPORTED_FILETYPE', _msg: { zhCN: '请切换到网页端上传文件!', enUS: 'Please switch to WebApp to upload files.' } }
 | 
			
		||||
      // #endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!fileSize) {
 | 
			
		||||
      let _msg = { zhCN: '文件为空,无法上传。', enUS: 'Empty files cannot be uploaded.' }
 | 
			
		||||
      this.showToast({ type: this.c2t.YELLOW, title: this.localizeText(_msg) })
 | 
			
		||||
      return { _state: 'CER_EMPTY_FILE', _msg }
 | 
			
		||||
      return { _state: 'CER_EMPTY_FILE', _msg: { zhCN: '文件为空,无法上传。', enUS: 'Empty files cannot be uploaded.' } }
 | 
			
		||||
    } else if (fileSize > (globalThis.wo?.envar?.fileSizeLimit || 10485760)) {
 | 
			
		||||
      let sizeLimitMB = parseInt((globalThis.wo?.envar?.fileSizeLimit || 10485760) / 1048576) + 'MB'
 | 
			
		||||
      let _msg = { zhCN: `文件太大了,无法上传。最大允许 ${sizeLimitMB}`, enUS: `File too large to upload. Maximum allowed is ${sizeLimitMB}` }
 | 
			
		||||
      this.showToast({ type: this.c2t.YELLOW, title: this.localizeText(_msg) })
 | 
			
		||||
      return { _state: 'CER_FILE_TOO_LARGE', _msg }
 | 
			
		||||
      return { _state: 'CER_FILE_TOO_LARGE', _msg: { zhCN: `文件太大了,无法上传。最大允许 ${sizeLimitMB}`, enUS: `File too large to upload. Maximum allowed is ${sizeLimitMB}` } }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (filePath) {
 | 
			
		||||
@ -350,7 +353,7 @@ export default {
 | 
			
		||||
        try {
 | 
			
		||||
          data = JSON.parse(data)
 | 
			
		||||
        } catch (exp) {
 | 
			
		||||
          return { _state: 'CLIENT_FAIL_RESPONSE_JSON_MALFORMED' }
 | 
			
		||||
          return { _state: 'BER_FAIL_RESPONSE_JSON_MALFORMED', _msg: { zhCN: '文件上传失败。请稍后再试,或向客服投诉。', enUS: 'File upload failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -358,10 +361,10 @@ export default {
 | 
			
		||||
        // 后台送来的 baseUrl 在开发环境下,不一定符合前端实际,因为后台只知道预设的 servUrl 例如 https://pexserver.test.tic.cc:7739/... ,而开发环境下实际上是 http://localhost:7739/... 所以再设置一个 fileUrl 来根据 location.origin 调整。// todo: 改名叫 clientUrl 或 userUrl 或 baseUrl4Client,与 baseUrl 对应
 | 
			
		||||
        return { _state: 'SUCCESS', fileUrl: this.make_server_url(data.path), ...data } // { path, destination, filename, fileUrl, cid?, ipfsUrl?, baseUrl?, ...file } 注意,data.path 不包含起头的 '/'
 | 
			
		||||
      } else {
 | 
			
		||||
        return { _state: 'CLIENT_FAIL_UPLOAD_FILE', error: errorUpload }
 | 
			
		||||
        return { _state: 'BER_FAIL_UPLOAD_FILE', _msg: { zhCN: '文件上传失败。请稍后再试,或向客服投诉。', enUS: 'File upload failed. Please try again later, or report to customer service.' }, error: errorUpload }
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      return { _state: 'CLIENT_FAIL_CHOOSE_FILE' }
 | 
			
		||||
      return { _state: 'BER_FAIL_CHOOSE_FILE', _msg: { zhCN: '文件选择失败。请稍后再试,或向客服投诉。', enUS: 'File choose failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
@ -375,7 +378,7 @@ export default {
 | 
			
		||||
    if (mediaType === 'image') {
 | 
			
		||||
      let [errorChoose, { tempFilePaths, tempFiles } = {}] = await uni.chooseImage({ count, sizeType, sourceType })
 | 
			
		||||
      if (errorChoose) {
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE' }
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE', _msg: { zhCN: '图像选择失败。请稍后再试,或向客服投诉。', enUS: 'Image choose failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
      }
 | 
			
		||||
      fileSize = tempFiles?.[0]?.size
 | 
			
		||||
      filePath = tempFilePaths?.[0] // 在 H5 上并不是文件路径名,而是类似 "blob:http://localhost:8080/f0d3e54d-0694-4803-8097-641d76a10b0d“。// 在 iOS 上是 "_doc/uniapp_temp_1598593902955/compressed/1598593925815.png", 有时还包含从 file:/// 开始的完整路径名
 | 
			
		||||
@ -393,7 +396,7 @@ export default {
 | 
			
		||||
    } else if (mediaType === 'video') {
 | 
			
		||||
      let [errorChoose, { tempFilePath, tempFile, duration, size, width, height, name }] = await uni.chooseVideo({ sourceType, maxDuration })
 | 
			
		||||
      if (errorChoose) {
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE' }
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE', _msg: { zhCN: '视频选择失败。请稍后再试,或向客服投诉。', enUS: 'Video choose failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
      }
 | 
			
		||||
      fileSize = size
 | 
			
		||||
      filePath = tempFilePath // 在 iOS 上形如 "file:///var/mobile/Containers/Data/Application/55A76332-44F5-4D5F-A9F6-3F857D584883/Documents/Pandora/apps/26B43CD2F587D37FC6799108434A6F84/doc/uniapp_temp_1598596171580/gallery/IMG_3082.MOV"
 | 
			
		||||
@ -408,6 +411,7 @@ export default {
 | 
			
		||||
      // 20200915测试,阿里云支持上传 *.mov 了。
 | 
			
		||||
      if (!path.extname(cloudPath)) cloudPath += '.mp4'
 | 
			
		||||
    } else {
 | 
			
		||||
      // #ifdef WEB
 | 
			
		||||
      // https://uniapp.dcloud.net.cn/uniCloud/storage.html#uploadfile
 | 
			
		||||
      let { errMsg, tempFilePaths, tempFiles } = await uniCloud.chooseAndUploadFile({
 | 
			
		||||
        type: Array.isArray(mediaType) ? undefined : 'all', // valid for H5 only
 | 
			
		||||
@ -418,23 +422,25 @@ export default {
 | 
			
		||||
        // onUploadProgress: ({ index, loaded, total, tempFilePath, tempFile }) => { }
 | 
			
		||||
      })
 | 
			
		||||
      if (errMsg !== 'chooseAndUploadFile:ok') {
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE' }
 | 
			
		||||
        return { _state: 'CER_FAIL_CHOOSE', _msg: { zhCN: '文件选择失败。请稍后再试,或向客服投诉。', enUS: 'File choose failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
      }
 | 
			
		||||
      fileSize = tempFiles?.[0]?.size
 | 
			
		||||
      if (fileSize) {
 | 
			
		||||
        return { _state: 'SUCCESS', fileUrl: tempFiles?.[0]?.url }
 | 
			
		||||
      } else {
 | 
			
		||||
        return { _state: 'CER_EMPTY_FILE', _msg: { zhCN: '文件为空,无法上传。', enUS: 'Empty files cannot be uploaded.' } }
 | 
			
		||||
      }
 | 
			
		||||
      // #endif
 | 
			
		||||
      // #ifndef WEB
 | 
			
		||||
      return { _state: 'UNSUPPORTED_FILETYPE', _msg: { zhCN: '请切换到网页端上传文件!', enUS: 'Please switch to WebApp to upload files.' } }
 | 
			
		||||
      // #endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!fileSize) {
 | 
			
		||||
      let _msg = { zhCN: '文件为空,无法上传。', enUS: 'Empty files cannot be uploaded.' }
 | 
			
		||||
      this.showToast({ type: this.c2t.YELLOW, title: this.localizeText(_msg) })
 | 
			
		||||
      return { _state: 'CER_EMPTY_FILE', _msg }
 | 
			
		||||
      return { _state: 'CER_EMPTY_FILE', _msg: { zhCN: '文件为空,无法上传。', enUS: 'Empty files cannot be uploaded.' } }
 | 
			
		||||
    } else if (fileSize > (globalThis.wo?.envar?.fileSizeLimit || 10485760)) {
 | 
			
		||||
      let sizeLimitMB = parseInt((globalThis.wo?.envar?.fileSizeLimit || 10485760) / 1048576) + 'MB'
 | 
			
		||||
      let _msg = { zhCN: `文件太大了,无法上传。最大允许 ${sizeLimitMB}`, enUS: `File too large to upload. Maximum allowed is ${sizeLimitMB}` }
 | 
			
		||||
      this.showToast({ type: this.c2t.YELLOW, title: this.localizeText(_msg) })
 | 
			
		||||
      return { _state: 'CER_FILE_TOO_LARGE', _msg }
 | 
			
		||||
      return { _state: 'CER_FILE_TOO_LARGE', _msg: { zhCN: `文件太大了,无法上传。最大允许 ${sizeLimitMB}`, enUS: `File too large to upload. Maximum allowed is ${sizeLimitMB}` } }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (filePath) {
 | 
			
		||||
@ -452,10 +458,10 @@ export default {
 | 
			
		||||
      if (fileID) {
 | 
			
		||||
        return { _state: 'SUCCESS', fileUrl: fileID, requestId }
 | 
			
		||||
      } else {
 | 
			
		||||
        return { _state: 'CLIENT_WOBASE_FAIL_uploadFile' }
 | 
			
		||||
        return { _state: 'BER_FAIL_UPLOAD_FILE', _msg: { zhCN: '文件上传失败。请稍后再试,或向客服投诉。', enUS: 'File upload failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return { _state: 'CLIENT_FAIL_chooseFile' }
 | 
			
		||||
    return { _state: 'BER_FAIL_CHOOSE_FILE', _msg: { zhCN: '文件上传失败。请稍后再试,或向客服投诉。', enUS: 'File upload failed. Please try again later, or report to customer service.' } }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  async pickupFile ({
 | 
			
		||||
@ -475,7 +481,7 @@ export default {
 | 
			
		||||
    } else if (baseType === 'SERVER') {
 | 
			
		||||
      return await this.pickupFile2Server({ mediaType, count, sizeType, sourceType, maxDuration, url, header, formData, name })
 | 
			
		||||
    } else {
 | 
			
		||||
      return { _state: 'CLEINT_FAIL_UNKNOWN_WOBASE_TYPE', baseType }
 | 
			
		||||
      return { _state: 'CLEINT_FAIL_UNKNOWN_WOBASE_TYPE', baseType, _msg: { zhCN: '不支持的后台类型。', enUS: 'Unsupported base type.' } }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
@ -644,7 +650,7 @@ export default {
 | 
			
		||||
      date = new Date(date)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!(date instanceof Date) || !date.toJSON()) {
 | 
			
		||||
    if (!(date instanceof Date) || !date?.toJSON?.()) {
 | 
			
		||||
      return ''
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user