记录:ios系统http请求的一些不同

最近在做小程序文件下载的的时候遇见的一些问题,电脑端和安卓端均能够执行成功,ios端出现了错误,仔细排查后发现了问题

http响应头问题:当Content-Type为APPLICATION/OCTET-STREAM时,需要从Content-Disposition中获取文件名称信息

  • 安卓,windows中Content-Disposition的值为字符串
  • ios 中 Content-Disposition的值为数组
// 兼容型写法
if (res.header['Content-Type'] == "APPLICATION/OCTET-STREAM") {
    let fileInfo = res.header['Content-Disposition'] || ''
        // 针对ios端做特殊处理
    if (fileInfo instanceof Array) {
        fileInfo = fileInfo[0] || ''
    }
    if (!fileInfo) {
        uni.hideLoading()
        uni.showToast({
            icon: "error",
            title: "保存失败"
        })
        reject(err)
    }
    const data = {
        data: {
            data: res.tempFilePath,
            'Content-Disposition': res.header[
                'Content-Disposition'],
            filename: new Date().getTime() + decodeURI(fileInfo.split(
                "filename=")[1])
        }
    }
    return resolve(data);
}

当文件名称相同时,fs.saveFile()可能出现文件保存失败的情况,解决方法是使用时间戳拼接文件名,减少文件名相同的概率

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容