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);
            }
        });
    }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!