| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /*
- * @Description: 统一上传工具,先获取uploadToken,再上传到新接口
- * @Author: Auto
- * @Date: 2024-01-01
- */
- // import axios from 'axios'
- // import Config from '../config'
- import axios from './axios.min.js'
- let hostParts = window.location.host.split('.');
- let tld = hostParts.slice(2).join('.') || 'com';
- let ho = window.location.host.split('.')[1];
- let host80 = 'https://secure.' + ho + '.' + tld;
- let host05 = 'https://file.' + ho + '.com';
- /**
- * 统一上传方法
- * @param {File} file - 要上传的文件
- * @param {String} originalUrl - 原上传接口URL(用于获取uploadToken)
- * @param {Object} headers - 请求头
- * @param {Function} onProgress - 上传进度回调
- * @returns {Promise} 上传结果
- */
- export async function unifiedUpload(file, originalUrl, headers = {}, onProgress = null) {
- try {
- // 第一步:调用原接口获取 uploadToken
- const formData = new FormData()
- formData.append('file', file)
-
- // 设置请求头
- const requestHeaders = {
- 'Access-Token': sessionStorage.getItem("access_token") || '',
- 'Language': sessionStorage.getItem("lang") || '',
- 'CLIENT': sessionStorage.getItem("CLIENT") || '',
- ...headers
- }
-
- // 获取基础URL
- let baseURL = host80
-
- // 提取原接口路径
- let originalPath = originalUrl
- if (originalUrl.startsWith('http://') || originalUrl.startsWith('https://')) {
- // 完整URL,提取路径部分
- const urlObj = new URL(originalUrl)
- originalPath = urlObj.pathname
- }
-
- // 调用原接口获取 uploadToken(先不传文件,只获取token)
- // 如果原接口需要文件才能返回token,则传文件
- const tokenFormData = new FormData()
- tokenFormData.append('file', file)
-
- const tokenResponse = await axios.post(originalPath, tokenFormData, {
- baseURL: baseURL,
- headers: requestHeaders,
- timeout: 30000,
- onUploadProgress: (progressEvent) => {
- if (onProgress && progressEvent.total) {
- const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total)
- onProgress({ percent })
- }
- }
- })
-
- // 从原接口响应中获取 uploadToken
- // 假设原接口返回格式为 { code: 200, data: { uploadToken: 'xxx', ... } } 或 { code: 200, uploadToken: 'xxx' }
- // let uploadToken = null
- // if (tokenResponse.data.code == 200) {
- // if (tokenResponse.data.data.path) {
- // // 如果直接返回 uploadToken
- // uploadToken = tokenResponse.data.data.path
- // }
- // }
-
- // if (!uploadToken) {
- // throw new Error('Failed to get uploadToken from original upload interface')
- // }
-
- // // 第二步:使用新接口上传文件
- // const uploadFormData = new FormData()
- // uploadFormData.append('file', file)
- // uploadFormData.append('uploadToken', uploadToken)
-
- // const uploadResponse = await axios.post('/common/base/upload', uploadFormData, {
- // baseURL: host05,
- // headers: requestHeaders,
- // timeout: 60000,
- // onUploadProgress: (progressEvent) => {
- // if (onProgress && progressEvent.total) {
- // const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total)
- // onProgress({ percent })
- // }
- // }
- // })
-
- // return uploadResponse.data
- if (tokenResponse.data.code == 200) {
- return tokenResponse.data
- }
-
- } catch (error) {
- console.error('Upload error:', error)
- if (error.response) {
- return {
- code: error.response.status || 400,
- msg: error.response.data?.msg || error.message || 'Upload failed'
- }
- }
- return {
- code: 400,
- msg: error.message || 'Upload failed'
- }
- }
- }
- /**
- * 为 Element UI Upload 组件创建自定义上传方法
- * @param {String} originalUrl - 原上传接口URL
- * @param {Object} headers - 请求头
- * @returns {Function} http-request 方法
- */
- export function createUploadRequest(originalUrl, headers = {}) {
- return async (options) => {
- const { file, onProgress, onSuccess, onError } = options
-
- try {
- const result = await unifiedUpload(file, originalUrl, headers, onProgress)
-
- if (result.code === 200) {
- onSuccess(result)
- } else {
- onError(new Error(result.msg || 'Upload failed'))
- }
- } catch (error) {
- onError(error)
- }
- }
- }
|