uni-app uni.uploadFile上传文件时IOS APP端请求地址被转义
uni-app uni.uploadFile上传文件时IOS APP端请求地址被转义
| 项目信息 | 详细信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | win10 |
| 手机系统 | iOS |
| 手机系统版本号 | IOS 14 |
| 手机厂商 | 苹果 |
| 手机机型 | iphone xr |
| 页面类型 | vue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
uni.uploadFile({
// 地址带有token信息,会出现%3D被修改成=
url: postUrl,
filePath: filePath,
formData: {key: key},
success: res => {
if (res.statusCode === 204) {
callback(imageUrl)
} else {
showErrorMessage('图片上传失败')
}
},
fail: res => {
showErrorMessage('图片上传失败')
}
})
操作步骤:
- 必现
预期结果:
- url地址保持不变
实际结果:
- url地址被转义
bug描述:
项目所有的请求都是正常的,在做到个人中心-上传头像时,使用uni.uploadFile进行请求时,发现token被转义。
正常接口请求URL:
POST http://domain.com/api/Users/Update?appkey=APPKEY&token=F%2F7jyw7ouOlCJOjg5Lt2Qe%2B47Y7QCsCzFcrov3INYQRAtVaMz7tSTOOmGT8DdkPWE9spRyWLEyfc%2BGiF8bhyFfLzBaSGNm2bddMJ666SHB%2F3scHJCR25P9ok3FhPqDq8fjryPir7TKkveqOS5TtElilq3pbYdEcvQF6BQ%2B76OPmkWiSHaVeSIRNqvecDw0zmxf7mDO8TZT3%2FztR72qbugHEoSYbzDNvoPCuoSsjcJSdOJPNoVXAOd16DcjYns2PUHKRTl%2FIHN98oVYCevgK2Rw%3D%3D HTTP/1.1
Content-Type: application/json;charset=UTF-8
Connection: keep-alive
Connection: keep-alive
Accept: */*
User-Agent: iPhone11,8(iOS/14.0) Uninview(Uninview/1.0.0) Weex/0.26.0 828x1792
Content-Length: 1477
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
使用uni.uploadFile上传的URL:
POST http://domain.com/api/Users/UploadUserPhoto?userId=USERID&appkey=APPKEY&token=F/7jyw7ouOlCJOjg5Lt2Qe+47Y7QCsCzFcrov3INYQRAtVaMz7tSTOOmGT8DdkPWE9spRyWLEyfc+GiF8bhyFfLzBaSGNm2bddMJ666SHB/3scHJCR25P9ok3FhPqDq8fjryPir7TKkveqOS5TtElilq3pbYdEcvQF6BQ+76OPmkWiSHaVeSIRNqvecDw0zmxf7mDO8TZT3/ztR72qbugHEoSYbzDNvoPCuoSsjcJSdOJPNoVXAOd16DcjYns2PUHKRTl/IHN98oVYCevgK2Rw== HTTP/1.1
Content-Type: multipart/form-data; boundary=io.dcloud.uploader16028650370818
Connection: keep-alive
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Html5Plus/1.0 (Immersed/44) uni-app
Content-Length: 1257194
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
更多关于uni-app uni.uploadFile上传文件时IOS APP端请求地址被转义的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
请问解决了吗?
更多关于uni-app uni.uploadFile上传文件时IOS APP端请求地址被转义的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是iOS平台下uni.uploadFile的一个已知问题。在iOS端,uni.uploadFile会对URL中的参数进行自动解码,导致原本编码的字符(如%2F被解码为/,%2B被解码为+,%3D被解码为=)被还原。
从你的请求对比可以看出:
- 正常请求中token保持编码状态:
F%2F7jyw7ouOlCJOjg5Lt2Qe%2B47Y7QCsCzFcrov3INYQRAtVaMz7tSTOOmGT8DdkPWE9spRyWLEyfc%2BGiF8bhyFfLzBaSGNm2bddMJ666SHB%2F3scHJCR25P9ok3FhPqDq8fjryPir7TKkveqOS5TtElilq3pbYdEcvQF6BQ%2B76OPmkWiSHaVeSIRNqvecDw0zmxf7mDO8TZT3%2FztR72qbugHEoSYbzDNvoPCuoSsjcJSdOJPNoVXAOd16DcjYns2PUHKRTl%2FIHN98oVYCevgK2Rw%3D%3D - uni.uploadFile请求中token被解码:
F/7jyw7ouOlCJOjg5Lt2Qe+47Y7QCsCzFcrov3INYQRAtVaMz7tSTOOmGT8DdkPWE9spRyWLEyfc+GiF8bhyFfLzBaSGNm2bddMJ666SHB/3scHJCR25P9ok3FhPqDq8fjryPir7TKkveqOS5TtElilq3pbYdEcvQF6BQ+76OPmkWiSHaVeSIRNqvecDw0zmxf7mDO8TZT3/ztR72qbugHEoSYbzDNvoPCuoSsjcJSdOJPNoVXAOd16DcjYns2PUHKRTl/IHN98oVYCevgK2Rw==
解决方案:
- 将token参数移到formData中(推荐):
uni.uploadFile({
url: 'http://domain.com/api/Users/UploadUserPhoto?userId=USERID&appkey=APPKEY',
filePath: filePath,
formData: {
key: key,
token: 'F%2F7jyw7ouOlCJOjg5Lt2Qe%2B47Y7QCsCzFcrov3INYQRAtVaMz7tSTOOmGT8DdkPWE9spRyWLEyfc%2BGiF8bhyFfLzBaSGNm2bddMJ666SHB%2F3scHJCR25P9ok3FhPqDq8fjryPir7TKkveqOS5TtElilq3pbYdEcvQF6BQ%2B76OPmkWiSHaVeSIRNqvecDw0zmxf7mDO8TZT3%2FztR72qbugHEoSYbzDNvoPCuoSsjcJSdOJPNoVXAOd16DcjYns2PUHKRTl%2FIHN98oVYCevgK2Rw%3D%3D'
},
success: res => {
if (res.statusCode === 204) {
callback(imageUrl)
} else {
showErrorMessage('图片上传失败')
}
},
fail: res => {
showErrorMessage('图片上传失败')
}
})
- 使用条件编译针对iOS平台处理:
// #ifdef APP-PLUS
if (plus.os.name === 'iOS') {
// iOS平台需要特殊处理,将token放在formData中
// 或者对URL进行特殊编码处理
}
// #endif

