优化
This commit is contained in:
+48
-2
@@ -42,6 +42,13 @@ async function tokenAfterUnauthorized(failedToken) {
|
||||
|
||||
function overseasUrl(path) {
|
||||
const base = String(session.apiBase || '').replace(/\/$/, '')
|
||||
const nativeRuntime = typeof plus !== 'undefined'
|
||||
|| (typeof location !== 'undefined' && location.protocol === 'file:')
|
||||
if (nativeRuntime && !/^https?:\/\//i.test(base)) {
|
||||
const error = new Error('海外服务地址未配置:App 必须设置绝对 HTTP(S) 地址 VITE_OVERSEAS_API_BASE_URL')
|
||||
error.code = 'PDA_OVERSEAS_API_BASE_REQUIRED'
|
||||
throw error
|
||||
}
|
||||
const value = `/${String(path || '').replace(/^\/+/, '')}`
|
||||
const normalized = /\/(?:api|overseas-api)$/.test(base)
|
||||
? value.replace(/^\/api(?=\/)/, '')
|
||||
@@ -79,14 +86,53 @@ export async function overseasRequest(method, path, data, retry = true) {
|
||||
}
|
||||
|
||||
function rawUpload(path, filePath, name, token) {
|
||||
const browserFile = typeof Blob !== 'undefined' && filePath instanceof Blob
|
||||
if (!browserFile && !String(filePath || '').trim()) {
|
||||
const error = new Error('未获取到可上传的照片路径,请重新拍摄')
|
||||
error.code = 'PDA_UPLOAD_FILE_PATH_REQUIRED'
|
||||
return Promise.reject(error)
|
||||
}
|
||||
let url
|
||||
try { url = overseasUrl(path) } catch (error) { return Promise.reject(error) }
|
||||
const h5Runtime = typeof window !== 'undefined' && typeof plus === 'undefined'
|
||||
if (h5Runtime && browserFile) return new Promise((resolve, reject) => {
|
||||
uni.uploadFile({
|
||||
url, files: [{ name, file: filePath }],
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
success: resolve,
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '海外作业文件上传失败'), { network: true, uploadUrl: url }))
|
||||
})
|
||||
})
|
||||
if (h5Runtime && /^blob:/i.test(filePath)) {
|
||||
const selectedFile = fetch(filePath).then((source) => {
|
||||
if (!source.ok) throw new Error('无法读取已选择的照片')
|
||||
return source.blob()
|
||||
})
|
||||
return selectedFile.then(async (blob) => {
|
||||
const form = new FormData()
|
||||
const suffix = String(blob.type || '').split('/')[1] || 'jpg'
|
||||
form.append(name, blob, blob.name || `pda-photo.${suffix}`)
|
||||
if (typeof XMLHttpRequest !== 'undefined') return new Promise((resolve, reject) => {
|
||||
const request = new XMLHttpRequest()
|
||||
request.open('POST', url)
|
||||
request.setRequestHeader('Authorization', `Bearer ${token}`)
|
||||
request.onload = () => resolve({ statusCode: request.status, data: request.responseText, header: {} })
|
||||
request.onerror = () => reject(new Error('海外作业文件上传失败'))
|
||||
request.send(form)
|
||||
})
|
||||
const response = await fetch(url, { method: 'POST', headers: { Authorization: `Bearer ${token}` }, body: form })
|
||||
return { statusCode: response.status, data: await response.text(), header: Object.fromEntries(response.headers.entries()) }
|
||||
})
|
||||
.catch((cause) => { throw Object.assign(new Error(cause.message || '海外作业文件上传失败'), { network: true, uploadUrl: url }) })
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.uploadFile({
|
||||
url: overseasUrl(path),
|
||||
url,
|
||||
filePath,
|
||||
name,
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
success: resolve,
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '海外作业文件上传失败'), { network: true }))
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '海外作业文件上传失败'), { network: true, uploadUrl: url }))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user