uni-app 云存储上传问题
uni-app 云存储上传问题
示例代码:
curl --location --request GET 'https://unicloud-api.dcloud.net.cn/unicloud/api/file/upload-info?spaceId=bfced1c1-a8e2-4893-9bb3-ecb5d2cbd9c0&appid=&provider=aliyun&name=点赞三连.mp4&size=13867214' \
--header 'accept: application/json, text/plain, */*' \
--header 'accept-encoding: gzip, deflate, br' \
--header 'accept-language: zh-CN,zh;q=0.9' \
--header 'cache-control: no-cache' \
--header 'cookie: email=40851@163.com; iqx__Session=jucg665lkqd6v55fna237is553; dcloud_session=eyJpdiI6Ikd6bm1yU0F3VFhKZVR1UFZBKzZhWHc9PSIsInZhbHVlIjoiSUo4V2RyRkdNWDdwdXhybHM4R2ZMaFQrTHlvXC9vc2FOaE8xNndOZXJJUDkrWFUzOWJsZzcwRWVjaUxwb08wbTZFXC8yYXRwdFBabVhGZXlwZG9zT3lpQT09IiwibWFjIjoiOWMxN2Y3ZjFhYWEyMTFhNjg2MTUxZjQzMzIwZTUyMThjMGU5MTU5YTU5ZTc0NzIwYWU3ODFmMWU0ZDM2MjQ5YyJ9; Hm_lvt_16bea9b124e2f593705dfb2997ff87db=1648714477; Hm_lpvt_16bea9b124e2f593705dfb2997ff87db=1648714477; dev_session=eyJpdiI6IjZmdEZcLzViQ3J5OUMzd3ZHTUVWNW1BPT0iLCJ2YWx1ZSI6IjQxNkxVa2dLNkdvN0MwWVwvMHdaRnNoaEhydWNqSHVlTDU1aFlyM0ErcWlORUxBWERrTVlORjB5VDJyck93UzBBZ2l2TytKVzZ3MWdTZ2lXSTBRVHhtdz09IiwibWFjIjoiM2UzOWU4NGJkOWIyMWFjOGM2MTZmMjdmMGViZThmZGNmOTAzYTExYmRjMzcwZTVmOTA0MmM2M2JlYWY4NjA0MyJ9; dev_session=eyJpdiI6IlxcLzZoRXpqaWtbMkZGZ0RQWVJqV096V2ZzQUFBPT0iLCJ2YWx1ZSI6ImhNblpyYW5MYlg4Z0k0RnozaUZBOCtvZ0hHUEVnS1wvXC80MFhpaG1oSmFaWWdhXC9RZmtGb2Y2ZU14ZVp5cTByMkhwaytLbUN4Q3dLWFBWTUlUelc5XC9WQT09IiwibWFjIjoiMjBiZjFmNTFkM2M4Njk4ZTE5MzI0ZjM1ZTI5NmNkMTk4OTljNWM1YTE3Yjc2NGRkODEzOWE2MGViYTQ3ZTBjMyJ9' \
--header 'origin: https://unicloud.dcloud.net.cn' \
--header 'pragma: no-cache' \
--header 'referer: https://unicloud.dcloud.net.cn/' \
--header 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"' \
--header 'sec-ch-ua-mobile: ?0' \
--header 'sec-ch-ua-platform: "Windows"' \
--header 'sec-fetch-dest: empty' \
--header 'sec-fetch-mode: cors' \
--header 'sec-fetch-site: same-site' \
--header 'token: 0e17913376ed3d211ecb52f1d6338e32' \
--header 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36'
curl --location --request PUT 'https://bsppub.oss-cn-shanghai.aliyuncs.com/VKCEYUGU-bfced1c1-a8e2-4893-9bb3-ecb5d2cbd9c0/a24b2e5d-9d39-439e-a3b6-d8d475fc39fb.mp4?Expires=1648718369&OSSAccessKeyId=LTAIupaslTlUlspm&Signature=k9iNSktAl7l4YecLa96xm6brDK8%' \
--header 'Accept: application/json, text/plain, */*' \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Accept-Language: zh-CN,zh;q=0.9' \
--header 'Cache-Control: no-cache' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/octet-stream' \
--header 'Origin: https://unicloud.dcloud.net.cn' \
--header 'Pragma: no-cache' \
--header 'Referer: https://unicloud.dcloud.net.cn/' \
--header 'sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"' \
--header 'sec-ch-ua-mobile: ?0' \
--header 'sec-ch-ua-platform: "Windows"' \
--header 'Sec-Fetch-Dest: empty' \
--header 'Sec-Fetch-Mode: cors' \
--header 'Sec-Fetch-Site: cross-site' \
--header 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36' \
--data-binary '@/D:/迅雷下载/素材/娱乐一起FUN.mp4'
操作步骤:
请求接口获取上传接口
https://unicloud-api.dcloud.net.cn/unicloud/api/file/upload-info?spaceId=bfced1c1-a8e2-4893-9bb3-ecb5d2cbd9c0&appid=&provider=aliyun&name=点赞三连.mp4&size=13867214
请求这个接口获取上传所需的url
然后进行put上传
https://bsppub.oss-cn-shanghai.aliyuncs.com/VKCEYUGU-bfced1c1-a8e2-4893-9bb3-ecb5d2cbd9c0/a24b2e5d-9d39-439e-a3b6-d8d475fc39fb.mp4?Expires=1648718369&OSSAccessKeyId=LTAIupaslTlUlspm&Signature=k9iNSktAl7l4YecLa96xm6brDK8%
预期结果:
文件就获取到了
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-bfced1c1-a8e2-4893-9bb3-ecb5d2cbd9c0/a24b2e5d-9d39-439e-a3b6-d8d475fc39fb.mp4
但是没有继续执行同步数据的接口 所以不会把此文件挂到我用户下面,就不会减少存储剩余大小。
实际结果:
文件就获取到了
https://vkceyugu.cdn.bspapp.com/VKCEYUGU-bfced1c1-a8e2-4893-9bb3-ecb5d2cbd9c0/a24b2e5d-9d39-439e-a3b6-d8d475fc39fb.mp4
但是没有继续执行同步数据的接口 所以不会把此文件挂到我用户下面,就不会减少存储剩余大小。
bug描述:
经过抓包测试,发现如果只走api获取TOKEN然后上传文件,不走同步接口是不会记录的。
1 回复
在使用 uni-app 进行云存储上传时,可能会遇到一些问题。以下是一些常见问题及其解决方案:
1. 上传文件大小限制
- 问题描述:云存储通常有文件大小限制,上传大文件时可能会失败。
- 解决方案:
- 检查云存储服务商的文件大小限制,确保文件不超过限制。
- 如果需要上传大文件,可以考虑分片上传(chunked upload)或使用其他存储服务。
2. 文件类型限制
- 问题描述:某些云存储服务可能限制上传的文件类型。
- 解决方案:
- 检查云存储服务商的文件类型限制,确保上传的文件类型在允许范围内。
- 如果需要上传受限文件类型,可以考虑修改文件扩展名或使用其他存储服务。
3. 上传速度慢
- 问题描述:上传速度慢可能是由于网络问题或服务器性能问题。
- 解决方案:
- 检查网络连接,确保网络稳定。
- 如果可能,使用 CDN 加速上传。
- 对于大文件,考虑分片上传以提高上传速度。
4. 上传失败
- 问题描述:上传失败可能是由于网络问题、服务器问题或代码错误。
- 解决方案:
- 检查网络连接,确保网络稳定。
- 检查服务器状态,确保服务器正常运行。
- 检查代码,确保上传逻辑正确,特别是文件路径、上传 URL 和请求参数。
5. 跨域问题
- 问题描述:在浏览器端上传文件时,可能会遇到跨域问题。
- 解决方案:
- 确保服务器配置了正确的 CORS 头,允许跨域请求。
- 如果使用云存储服务,确保服务商支持跨域上传。
6. 权限问题
- 问题描述:上传文件时可能会遇到权限问题,导致上传失败。
- 解决方案:
- 检查云存储服务的权限设置,确保有上传权限。
- 如果需要,生成并配置正确的访问令牌或 API 密钥。
7. 文件路径问题
- 问题描述:上传文件时,文件路径错误可能导致上传失败。
- 解决方案:
- 检查文件路径,确保路径正确。
- 如果使用相对路径,确保路径相对于当前工作目录正确。
8. 上传进度监控
- 问题描述:需要监控上传进度,但不知道如何实现。
- 解决方案:
- 使用
uni.uploadFile
方法时,可以通过progress
回调函数监控上传进度。 - 示例代码:
uni.uploadFile({ url: 'https://example.com/upload', filePath: filePath, name: 'file', formData: { 'user': 'test' }, success: (uploadFileRes) => { console.log(uploadFileRes.data); }, fail: (err) => { console.error(err); }, complete: () => { console.log('上传完成'); }, progress: (res) => { console.log('上传进度', res.progress); } });
- 使用
9. 云存储服务商特定问题
- 问题描述:不同云存储服务商可能有特定的问题或限制。
- 解决方案:
- 查阅云存储服务商的文档,了解其特定的上传限制和要求。
- 如果遇到问题,联系云存储服务商的技术支持。
10. uni-app 版本问题
- 问题描述:不同版本的 uni-app 可能有不同的行为或 bug。
- 解决方案:
- 确保使用最新版本的 uni-app。
- 如果遇到问题,查阅 uni-app 的官方文档或社区论坛,寻找解决方案。
示例代码
以下是一个简单的 uni-app 云存储上传示例:
uni.chooseImage({
count: 1,
success: (res) => {
const tempFilePaths = res.tempFilePaths;
uni.uploadFile({
url: 'https://example.com/upload',
filePath: tempFilePaths[0],
name: 'file',
formData: {
'user': 'test'
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data);
},
fail: (err) => {
console.error(err);
},
complete: () => {
console.log('上传完成');
},
progress: (res) => {
console.log('上传进度', res.progress);
}
});
}
});