uni-app 通过uni.downloadFile()方法下载的文件无法保存

uni-app 通过uni.downloadFile()方法下载的文件无法保存

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.3.12

手机系统:Android

手机系统版本号:Android 8.1

手机厂商:OPPO

手机机型:OPPO R11t

页面类型:vue

vue版本:vue2

打包方式:云端


示例代码:

这是我直接从相册选取的照片,然后下载下来再保存的,只是个示例

uni.chooseImage({ count: 1, sourceType: [‘camera’], success: function (res) { console.log(res.tempFilePaths[0], ‘res.tempFilePathsres.tempFilePaths’) uni.downloadFile({ url: res.tempFilePaths[0], success: res => { uni.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function () { console.log(‘save success’); } }); } }) } });


### 操作步骤:
```javascript
url为网络地址

uni.downloadFile({ url, success: ({ statusCode, tempFilePath }) => { if(statusCode === 200) { uni.saveImageToPhotosAlbum({ filePath: tempFilePath, success: res => { console.log(res, ‘res’) uni.showToast({ title: ‘保存成功’, icon:“success” }) }, fail: err => { console.log(err) } }) } }, complete: () => { uni.hideLoading() } }) ``

预期结果:

期望文件能够下载成功,并且成功保存至手机相册

实际结果:

实际结果不能进行保存

bug描述:

通过uni.downloadFile()下载下来的文件,无法保存 返回的字段值

"tempFilePath": "_doc/uniapp_temp_1653014688587/download/",

然后调用

uni.saveImageToPhotosAlbum({
filePath: tempFilePath
})

更多关于uni-app 通过uni.downloadFile()方法下载的文件无法保存的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

请升级至HBuilder X 3.4.10-alpha试下 【咨询问题/bug处理优先级规则】:https://ask.dcloud.net.cn/article/38139

更多关于uni-app 通过uni.downloadFile()方法下载的文件无法保存的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中使用 uni.downloadFile() 方法下载文件时,可能会遇到文件无法保存的问题。以下是一些可能的原因和解决方案:

1. 检查文件路径

uni.downloadFile() 方法下载的文件会保存到一个临时路径,你需要将这个临时文件保存到本地文件系统中。可以使用 uni.saveFile() 方法将文件保存到本地。

uni.downloadFile({
  url: 'https://example.com/file.pdf', // 文件的下载地址
  success: (res) => {
    if (res.statusCode === 200) {
      uni.saveFile({
        tempFilePath: res.tempFilePath, // 下载文件的临时路径
        success: (saveRes) => {
          console.log('文件保存成功:', saveRes.savedFilePath);
        },
        fail: (err) => {
          console.error('文件保存失败:', err);
        }
      });
    }
  },
  fail: (err) => {
    console.error('文件下载失败:', err);
  }
});

2. 检查权限

在某些平台上(如 Android),保存文件到本地需要相应的权限。确保你已经获取了 WRITE_EXTERNAL_STORAGE 权限。

// 在 manifest.json 中添加权限
{
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示"
    },
    "scope.writePhotosAlbum": {
      "desc": "你的相册将用于保存图片"
    },
    "scope.writeExternalStorage": {
      "desc": "你的存储将用于保存文件"
    }
  }
}

3. 检查文件类型

某些文件类型可能无法直接保存或打开。确保你下载的文件类型是支持的,并且在保存时指定正确的文件扩展名。

4. 检查网络请求

确保下载文件的 URL 是有效的,并且服务器允许跨域请求。如果 URL 无效或服务器不允许跨域请求,下载会失败。

5. 检查平台差异

不同平台(如 iOS 和 Android)对文件保存的处理方式可能不同。确保你的代码在不同平台上都能正常工作。

6. 使用 uni.getFileSystemManager()

如果你需要更复杂的文件操作,可以使用 uni.getFileSystemManager() 来进行文件管理。

const fs = uni.getFileSystemManager();
fs.saveFile({
  tempFilePath: res.tempFilePath,
  success: (saveRes) => {
    console.log('文件保存成功:', saveRes.savedFilePath);
  },
  fail: (err) => {
    console.error('文件保存失败:', err);
  }
});

7. 调试和日志

如果问题仍然存在,可以通过 console.log 打印出下载和保存过程中的各个步骤,查看哪一步出现了问题。

uni.downloadFile({
  url: 'https://example.com/file.pdf',
  success: (res) => {
    console.log('下载成功:', res);
    if (res.statusCode === 200) {
      uni.saveFile({
        tempFilePath: res.tempFilePath,
        success: (saveRes) => {
          console.log('保存成功:', saveRes);
        },
        fail: (err) => {
          console.error('保存失败:', err);
        }
      });
    }
  },
  fail: (err) => {
    console.error('下载失败:', err);
  }
});
回到顶部