saveVideoToPhotosAlbum 在uni-app鸿蒙Next中报错 code -2004

saveVideoToPhotosAlbum 在uni-app鸿蒙Next中报错 code -2004

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

PC开发环境操作系统:Mac

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

HBuilderX类型:正式

HBuilderX版本号:4.84

手机系统:HarmonyOS NEXT

手机系统版本号:HarmonyOS 6.0.0

手机厂商:华为

手机机型:PureX

页面类型:vue

vue版本:vue3

打包方式:离线

项目创建方式:HBuilderX

示例代码:

```javascript
const downloadTask = uni.downloadFile({  
url: videoUrl,  
header: {  
    'Content-Type': 'video/mp4'  
},  
timeout: 300000,  
success: res => {  
    console.log("downloadFile success", res)  // res = {tempFilePath: "/data/storage/el2/base/cache/HBuilder/uni-download/(4).download", statusCode: 200, errMsg: "downloadFile:ok", errSubject: "downloadFile"}  
    uni.hideLoading();  
    uni.saveVideoToPhotosAlbum({  
        filePath: res.tempFilePath,  
        success: () => {  
            uni.showToast({  
                title: '保存成功',  
                icon: 'success',  
                duration: 1500  
            });  
        },  
        fail: (e) => {  
            console.log("saveVideoToPhotosAlbum failed", e)  // e = {errMsg: "saveVideoToPhotosAlbum:fail save error, code: -2004"}  

            uni.showToast({  
                title: '保存失败',  
                icon: 'none',  
                duration: 1500  
            });  
        }  
    })  
},

操作步骤: 在模拟器和真机都有这个问题。

预期结果: 保存成功

实际结果: 保存失败

bug描述: saveVideoToPhotosAlbum 报错mp4 文件,报错:{errMsg: “saveVideoToPhotosAlbum:fail save error, code: -2004”}

怀疑是 tempFilePath 的文件名后缀是 .download,而不是.mp4。 但是也没找到方法修改它。

请帮忙看下这个问题, 谢谢。 @DCloud_UNI_yuhe

有个类似的反馈:https://ask.dcloud.net.cn/question/206804?item_id=307638&rf=false


更多关于saveVideoToPhotosAlbum 在uni-app鸿蒙Next中报错 code -2004的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于saveVideoToPhotosAlbum 在uni-app鸿蒙Next中报错 code -2004的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next系统中,saveVideoToPhotosAlbum返回-2004错误通常与文件格式或权限相关。从你的代码分析,主要问题确实在于下载的文件扩展名为.download而非.mp4,系统无法正确识别文件类型。

解决方案如下:

  1. 重命名文件:在调用saveVideoToPhotosAlbum前,使用uni.getFileSystemManager()重命名文件:
const fs = uni.getFileSystemManager()
const newPath = res.tempFilePath.replace('.download', '.mp4')
fs.rename({
  oldPath: res.tempFilePath,
  newPath: newPath,
  success: () => {
    uni.saveVideoToPhotosAlbum({
      filePath: newPath,
      // ...其他参数
    })
  }
})
  1. 检查文件权限:确保在manifest.json中已配置相册写入权限:
{
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>"
        ]
      }
    }
  }
}
回到顶部