关于wx.downloadFile
1、指定本地缓存路径filePath时,缓存上限是10M;
2、不指定filePath时,缓存上限是50M,下载成功会生成临时缓存,参数为tempFilePath;
3、不管缓存上限是10M还是50M,都包含了小程序本身所占用的一部分空间,所以实际在下载文件时,都要求文件大小比10M或50M要小才行;
4、保存到相册成功后需要删掉指定的本地缓存或临时缓存,为后续文件的下载腾出空间,使用fileManager的unlink方法即可。
关于wx.saveVideoToPhotosAlbum
遇到问题:
iOS端保存到相册正常,Android端保存到相册有时成功,有时失败,失败会报错:fail invalid file type
解决思路:
1、经测试发现,正常的情况下临时缓存是以.mp4为后缀结尾,凡是报错的视频临时缓存都是以.mp4s为后缀结尾的,很明显,小程序的api在安卓端不能识别这个后缀的缓存文件从而导致保存到相册失败,而iOS端却没有这个问题,说明小程序在跨平台的兼容性上还存在一些问题
2、问题变成了为什么临时缓存的后缀不一样,因为视频都是iOS端通过代码上传到阿里云平台上的,而在上传之前都经过转码,把mov转码为mp4,所以阿里云上存储的视频都是以.mp4为后缀的,按道理来说,下载后应该也是以.mp4为后缀,会出现这个问题,猜测是请求头的设置不一样,经过核对,发现有的视频请求头中content-Type的值为application/mp4,而有的为video/mp4,而经过测试发现,请求头为application/mp4的视频就会导致安卓端出现保存到相册失败的问题
关于批量设置HTTP 头
视频都存储在阿里云,由于在bucket下分了很多个虚拟的文件夹目录,嵌套多层,而视频总数超过一万,导致控制台提供的批量设置请求头的方式不可取,最后经过工单沟通,采用了命令行工具ossutil的批量修改指定文件的存储类型set-meta来实现,命令如下(64位mac系统):
查看mac版本:uname -a
下载工具:curl -o ossutilmac64 http://gosspublic.alicdn.com/ossutil/1.6.10/ossutilmac64
修改文件执行权限:chmod 755 ossutilmac64
生成配置文件:./ossutilmac64 config
修改配置参数:
./ossutilmac64 config
请输入配置文件名,文件名可以带路径(默认为:/home/user/.ossutilconfig,回车将使用默认路径。如果用户设置为其它路径,在使用命令时需要将--config-file选项设置为该路径): 未输入配置文件路径,将使用默认配置文件:/home/user/.ossutilconfig。
对于下述配置,回车将跳过相关配置项的设置,配置项的具体含义,请使用"help config"命令查看。
请输入endpoint:http://oss-cn-shenzhen.aliyuncs.com
请输入accessKeyID:yourAccessKeyID
请输入accessKeySecret:yourAccessKeySecret
请输入stsToken:
最后,批量设置以.mp4为后缀的文件请求头中content-Type的值为video/mp4:
./ossutilmac64 set-meta oss://xxxxxxxx-class-video/ Content-Type:video/mp4 --include "*.mp4" -u -r
至此,问题得到圆满解决,如对你有所帮助,求点个赞,多谢~