uni-app Vue3 uni.downloadFile和uni.getImageInfo获取到的文件类型错误,仅IOS端APP出现问题,小程序和安卓端均正常

uni-app Vue3 uni.downloadFile和uni.getImageInfo获取到的文件类型错误,仅IOS端APP出现问题,小程序和安卓端均正常

项目信息 详情
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 12.1 (21C52)
HBuilderX类型 正式
HBuilderX版本 3.4.15
手机系统 iOS
手机系统版本 iOS 15
手机厂商 苹果
手机机型 iphone xs max
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

示例图片地址:https://tuodan-app.guiyun.com/dev/love-app/uploads/8MxJWfjt0A/note/8Zt1aNLaA8/8Zt1D9nnZC.mp4?ci-process=snapshot&time=1&format=png

预期结果:

下载后本地路径应该为png

实际结果:

错误结果mp4

bug描述:

下载的是张图片,存储的文件却是mp4?

path````和``type``对不上,``type``是对的

{ “height”: 640, “orientation”: “up”, “path”: “file:///var/mobile/Containers/Data/Application/D7BA5753-40BC-4C7C-B9F7-81CD1D92E3BD/Documents/Pandora/apps/__UNI__ED48F53/doc/uniapp_temp_1656434141239/download/8Zt1D9nnZC.mp4”, “type”: “png”, “width”: 360, “errMsg”: “getImageInfo:ok” }


更多关于uni-app Vue3 uni.downloadFile和uni.getImageInfo获取到的文件类型错误,仅IOS端APP出现问题,小程序和安卓端均正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

这边实际测试安卓IOS设备都是返回的.mp4 之所以返回mp4是因为你这个链接的suggestedFilename是 .mp4 所以如果你想path与type一致有两个选择,要么规范你这个链接的文件名格式 要么你自己根据type去修改文件名后缀

更多关于uni-app Vue3 uni.downloadFile和uni.getImageInfo获取到的文件类型错误,仅IOS端APP出现问题,小程序和安卓端均正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我测试的结果并不是像你说的那样在安卓以及ios小程序我返回的是png。而且就算返回的是mp4,这也不合理,这本身就是张图片。况且这是腾讯云cos的媒体处理url,我不可能自定义它的url

回复 c***@guiyun.com: 看下私信,加我下QQ 然后把安卓 iOS的结果截图分别发给我

还有安卓的设备型号

回复 DCloud_iOS_WZT: 加了

这是一个iOS平台特有的问题,主要原因是uni.downloadFile在iOS端处理带查询参数的URL时存在bug。具体分析如下:

  1. 问题根源:
  • iOS端的uni.downloadFile会根据URL的扩展名自动设置保存文件的扩展名
  • 对于类似xxx.mp4?format=png的URL,iOS会错误地截取.mp4作为文件扩展名
  • 而安卓和小程序端能正确处理这种情况
  1. 临时解决方案:
  • 在下载前对URL进行处理,确保扩展名正确:
// 处理URL确保扩展名正确
const fixedUrl = imageUrl.split('?')[0] + '.png?' + imageUrl.split('?')[1]
uni.downloadFile({
  url: fixedUrl,
  success: (res) => {
    if (res.statusCode === 200) {
      uni.getImageInfo({
        src: res.tempFilePath,
        success: (info) => {
          console.log(info)
        }
      })
    }
  }
})
回到顶部