This commit is contained in:
2026-09-20 14:43:33 +08:00
parent 3ba8809222
commit 4dc8899086
2 changed files with 17 additions and 1 deletions
+3 -1
View File
@@ -174,7 +174,9 @@ export async function overseasDownload(path, options = {}) {
throw errorFrom({ ...response, data: {} }, '签收照片下载失败')
}
const contentType = String(response?.header?.['content-type'] || response?.header?.['Content-Type'] || '').toLowerCase()
if (expectedContentTypePrefix && !contentType.startsWith(expectedContentTypePrefix.toLowerCase())) {
// App-Plus downloadFile may omit response headers even when the image body was downloaded successfully.
// Reject an explicit non-image response, but allow a valid temp file when Content-Type is unavailable.
if (expectedContentTypePrefix && contentType && !contentType.startsWith(expectedContentTypePrefix.toLowerCase())) {
throw errorFrom({ ...response, data: {} }, '照片服务返回了无效内容,请稍后重试')
}
return response.tempFilePath
+14
View File
@@ -274,6 +274,20 @@ test('authenticated photo download maps the public api path through the H5 overs
assert.equal(calls[0].header.Authorization, `Bearer ${value.overseasAccessToken}`)
})
test('native image download accepts a valid temp file when App-Plus omits response headers', async () => {
prepareSession()
globalThis.uni.downloadFile = (options) => options.success({
statusCode: 200,
tempFilePath: '_doc/uniapp_temp/photo.jpg',
header: {}
})
assert.equal(
await overseasDownload('/api/pda/v1/last-leg/photo', { expectedContentTypePrefix: 'image/' }),
'_doc/uniapp_temp/photo.jpg'
)
})
test('image download rejects a JSON error envelope returned with HTTP 200', async () => {
prepareSession()
globalThis.uni.downloadFile = (options) => options.success({