4***@qq.com
4***@qq.com
  • 发布:2020-08-05 17:36
  • 更新:2023-03-31 11:32
  • 阅读:4457

【报Bug】uni.downloadFile 下载完自动命名的tempFilePath文件名过长导致下载失败。

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10

HBuilderX类型: 正式

HBuilderX版本号: 2.8.3

手机系统: Android

手机系统版本号: Android 10

手机厂商: 小米

手机机型: mix 2s

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

例如(此示例url为一个视频文件的下载地址,仅用来说明,时间长了url会失效)

let url = 'http://v6-hs.ixigua.com/0c524676a5a820be442a1551276f9fc0/5f2a8347/video/m/2201ac17b11acff4af8bccb1d777dbe646011669a703000003f93d1d5578/?a=1112&br=3519&bt=1173&cr=0&cs=0&dr=0&ds=3&er=&l=202008051658370100140481430D02274A&lr=unwatermarked&mime_type=video_mp4&qs=0&rc=M29uPDV0a2w2djMzN2QzM0ApOjlnOTU8MzxlN2dmM2k7N2deYGxkZjZiaWlfLS02Li9zcy5fMWBfNjQwLy4vYGIxMS86Yw%3D%3D&vl=&vr= '  
uni.downloadFile({  
                            url  
                        });

返回以下结果,文件名过长,linux最长文件名255,而此文件名长度270多,这个bug的根源在于下载完以后临时文件名的处理没有容错,应该向小程序平台一样进行一个随机字符串的重命名。

{  
    "tempFilePath": "_doc/uniapp_temp_1596617577461/download/?a=1112&br=3519&bt=1173&cr=0&cs=0&dr=0&ds=3&er=&l=202008051658370100140481430D02274A&lr=unwatermarked&mime_type=video_mp4&qs=0&rc=M29uPDV0a2w2djMzN2QzM0ApOjlnOTU8MzxlN2dmM2k7N2deYGxkZjZiaWlfLS02Li9zcy5fMWBfNjQwLy4vYGIxMS86Yw==&vl=&vr=.mp4",  
    "statusCode": 200,  
    "errMsg": "downloadFile:ok"  
}

操作步骤:

使用uni.downloadFile 下载一个没有文件名后缀的多参数较长的url即可复现。

预期结果:

使用uni.downloadFile 能正常下载文件 uni.saveImageToPhotosAlbum 或者uni.saveVideoToPhotosAlbum 能正常保存

实际结果:

uni.downloadFile 方法回调是成功的也返回tempFilePath但实际没有这个文件,并且会导致 uni.saveImageToPhotosAlbum 或者uni.saveVideoToPhotosAlbum 保存失败,但诡异这两个方法的是回调却是success,但实际并没有保存成功,文件不存在。

bug描述:

uni.downloadFile文件名过长导致下载失败,但是此方法回调是成功的也返回tempFilePath但实际没有这个文件,并且会导致 uni.saveImageToPhotosAlbum 或者uni.saveVideoToPhotosAlbum 保存失败,但诡异这两个方法的是回调却是success,但实际并没有保存成功。

2020-08-05 17:36 负责人:DCloud_Android_DQQ 分享
已邀请:

最佳回复

DCloud_Android_DQQ

DCloud_Android_DQQ

2.8.8 版本之后hx已修复。

  • 2***@qq.com

    没有修复,我2.9.8安卓还是有这个问题,刚下载3.0.0还是一样

    2020-12-23 20:43

  • DCloud_Android_DQQ

    回复 2***@qq.com: 你提供一下你的链接地址。

    2020-12-24 10:51

  • 2***@qq.com

    回复 2***@qq.com: 这个链接是抖音去水印的那个链接,是临时的,,这我看了下,如果下载那种后缀不是直接是.mp4的那种的,android识别不出来他是视频,我这边修改下文件名后缀就有了,这边你们修复的话应该需要先识别视频的格式,然后修改保存链接

    2020-12-25 12:16

  • MonikaCeng

    这个问题一直在:https://ask.dcloud.net.cn/question/119827

    2021-04-05 00:54

  • app1

    安卓文件名过长自动截去导致没有后缀怎么解决

    2022-02-28 16:27

DCloud_Android_DQQ

DCloud_Android_DQQ

收到,修复中

8***@qq.com

8***@qq.com

我也遇到同样的问题,还没解决好吗

  • DCloud_Android_DQQ

    2.8.8 版本之后hx已修复。

    2020-09-08 15:13

  • 8***@qq.com

    回复 DCloud_Android_DQQ: 我更新了版本文件名过长的依旧提示下载成功但是实际没有文件,还有安卓下载网络链接http://sns-video-hw.xhscdn.com/3654918495f53a9d8279c25659772995043e7e29_v1,返回数据"tempFilePath": "_doc/uniapp_temp_1599556293580/download/3654918495f53a9d8279c25659772995043e7e29_v1.mp4",可以使用saveImageToPhotosAlbum正常保存到相册,而ios同样操作生成的tempFilePath没有后面的.mp4,导致tempFilePath保存失败

    2020-09-08 17:27

v***@qq.com

v***@qq.com - 蓝牙

牛啊,这个问题都能找到原因。

1***@163.com

1***@163.com - 投资

请问楼主bug是怎样修复的

不舍昼夜

不舍昼夜

3.2.3 这个问题还有

imjinbo

imjinbo

都3.4.15了,这问题还在??都2022年了已经啊,能不能搞了???

1***@qq.com

1***@qq.com

HBuilder 3.7.8.20230323 版本,依然还有这个问题,文件名超过15个汉字后,返回的临时文件名缺失后缀

  • DCloud_Android_DQQ

    你好,提供一下复现问题的示例 我看看

    2023-03-27 11:00

  • 1***@qq.com

    回复 DCloud_Android_DQQ: 你好,现在发现只是下载我自己的文件时有这个问题,外部的文件链接,文件名超长了也没问题。但是我自己的文件,放到浏览器里也是可以正常下载的。对比发现下载文件时,响应头有差异,是不是这个有影响

    2023-03-28 19:40

  • 1***@qq.com

    回复 DCloud_Android_DQQ: 已经解决问题了。我们后端会根据请求头的UA,设置响应头中 Content-Disposition 中 filename 字段的编码方式。当filename 的值是 =?utf-8?B?+Base64(文件名) 这种格式的时候,uni.downLoadFile 下载文件时会无法识别出文件名,我在manifest.json 中修改覆盖默认UA后,现在可以了

    2023-03-29 10:08

  • DCloud_Android_DQQ

    回复 1***@qq.com: 感谢反馈。 会同步到文档注意事项

    2023-03-31 11:31

1***@qq.com

1***@qq.com

这是下载外部文件和我自己文件响应头的差别

DCloud_Android_DQQ

DCloud_Android_DQQ

根据开发者近期反馈。部分类似的下载问题,与后端设置响应头中 Content-Disposition 有关。

如果有类似问题可以先排查一下

  • lioe

    还是不行, 服务端响应头 "Content-Disposition": "attachment;fileName=23502000000004852621.pdf"

    但filename 已然截取的是请求url最后一段, 给个建议,截取字符命名时,设置个上限

    2023-05-10 10:00

要回复问题请先登录注册