uni-app uni.downloadFile 文件名字过长导致下载的文件没有后缀名

uni-app uni.downloadFile 文件名字过长导致下载的文件没有后缀名

开发环境 版本号 项目创建方式
Mac 11.2.3 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Mac

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

HBuilderX类型:Alpha

HBuilderX版本号:3.2.10

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

手机机型:mate40

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:

```javascript
uni.downloadFile({
url: surl,
success: res => {
uni.hideLoading();
if (res.statusCode === 200) {
const { tempFilePath } = res;
console.log(tempFilePath)
let filePath = plus.io.convertLocalFileSystemURL(tempFilePath);
console.log(filePath)
this.openDocInfo(filePath, false);
} else {
uni.core.alert('打开文件失败' + JSON.stringify(res))
}
},
fail: e => {
uni.hideLoading();
uni.showModal({
content: JSON.stringify(e) + '失败'
});
}
});

操作步骤:

uni.downloadFile 现在名字过长下载的文件没有后缀名?

预期结果:

uni.downloadFile 现在名字过长下载的文件没有后缀名?

实际结果:

uni.downloadFile 现在名字过长下载的文件没有后缀名?

bug描述:

uni.downloadFile 现在名字过长下载的文件没有后缀名?


更多关于uni-app uni.downloadFile 文件名字过长导致下载的文件没有后缀名的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

比较急

更多关于uni-app uni.downloadFile 文件名字过长导致下载的文件没有后缀名的实战教程也可以访问 https://www.itying.com/category-93-b0.html


解决了吗

请问解决了吗,遇到了同样的问题

下载链接补齐Content-Disposition 这是最快最方便的

有例子嘛?不太明白

回复 花生了仕么树: 如果链接地址过于复杂基本上都是通过Content-Disposition获取filename和扩展名的 你不懂可以百度一下

回复 DCloud_Android_ST: hao d e

查到的好像是后端来操作?后端说自己的代码没问题,是加了后缀的

这是 uni.downloadFile 在 Android 平台上的一个已知问题。当文件名过长时,系统可能会截断文件名,导致后缀名丢失。以下是解决方案:

  1. 手动指定文件名:在下载时通过 header 设置 Content-Disposition 或使用 filePath 参数(App端支持):
uni.downloadFile({
  url: surl,
  filePath: `_downloads/${Date.now()}.${getFileExt(surl)}`, // 自定义路径和文件名
  success: res => {
    // 处理成功逻辑
  }
});
  1. 从URL提取后缀并重命名
function getFileExt(url) {
  return url.split('.').pop().split(/\#|\?/)[0];
}

// 下载后重命名文件
uni.saveFile({
  tempFilePath: tempFilePath,
  success: savedRes => {
    const newPath = savedRes.savedFilePath.replace(/(\.[^\.]+)?$/, `.${ext}`);
    plus.io.resolveLocalFileSystemURL(savedRes.savedFilePath, entry => {
      entry.moveTo(entry.parent, newPath, success => {
        this.openDocInfo(newPath, false);
      });
    });
  }
});
  1. 使用 uni.saveFile + 重命名组合方案
uni.downloadFile({
  url: surl,
  success: res => {
    uni.saveFile({
      tempFilePath: res.tempFilePath,
      success: savedRes => {
        // 这里可以调用原生API重命名文件
        this.renameFile(savedRes.savedFilePath, `filename.${ext}`);
      }
    });
  }
});
回到顶部