巷子
巷子
  • 发布:2026-06-16 10:18
  • 更新:2026-06-16 10:19
  • 阅读:40

【报Bug】鸿蒙 downloadFile下载无后缀结尾的图片,保存的后缀存在问题,image长按保存图片,保存不了阿里云带样式的图片

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Mac

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

HBuilderX类型: 正式

HBuilderX版本号: 5.07

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS 6.0.0

手机厂商: 华为

手机机型: nova14

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

uni.downloadFile({
url: "https://hua5oss.oss-cn-hangzhou.aliyuncs.com/admin_uploads/image/2024/09/13/d2f4894d1e5b30b12126f69da0999120.JPG/watermark_hua_pic_info",
success: (res) => {
console.error('成功', res.tempFilePath)
},
fail: function (err) {
console.error('失败', err)
},
})

<image :show-menu-by-longpress="true" src="https://hua5oss.oss-cn-hangzhou.aliyuncs.com/admin_uploads/image/2024/09/13/d2f4894d1e5b30b12126f69da0999120.JPG/watermark_hua_pic_info"></image>

操作步骤:

uni.downloadFile({
url: "https://hua5oss.oss-cn-hangzhou.aliyuncs.com/admin_uploads/image/2024/09/13/d2f4894d1e5b30b12126f69da0999120.JPG/watermark_hua_pic_info",
success: (res) => {
console.error('成功', res.tempFilePath)
},
fail: function (err) {
console.error('失败', err)
},
})

<image :show-menu-by-longpress="true" src="https://hua5oss.oss-cn-hangzhou.aliyuncs.com/admin_uploads/image/2024/09/13/d2f4894d1e5b30b12126f69da0999120.JPG/watermark_hua_pic_info"></image>
执行下载和长按保存

预期结果:

uni.downloadFile返回的res.tempFilePath能正常带后缀jpg,能长按保存到相册

实际结果:

uni.downloadFile返回的res.tempFilePath后缀变成了watermark_hua_pic_info(阿里云图片样式),无法保存到相册

bug描述:

uni.downloadFile({
url: "https://hua5oss.oss-cn-hangzhou.aliyuncs.com/admin_uploads/image/2024/09/13/d2f4894d1e5b30b12126f69da0999120.JPG/watermark_hua_pic_info",
success: (res) => {
console.error('成功', res.tempFilePath)
},
fail: function (err) {
console.error('失败', err)
},
})下载的tempFilePath的后缀不对。

<image :show-menu-by-longpress="true" src="https://hua5oss.oss-cn-hangzhou.aliyuncs.com/admin_uploads/image/2024/09/13/d2f4894d1e5b30b12126f69da0999120.JPG/watermark_hua_pic_info"></image>
image 长按保存到相册保存不了

2026-06-16 10:18 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

好的,收到您的反馈。作为 DCloud 官方人员,我对您提交的这个 bug 反馈进行评审,具体如下:

1. 反馈内容完整性评审

您提交的 bug 反馈内容结构清晰,包含了标题、描述、环境信息、代码示例、复现步骤、预期和实际结果,这非常好,方便我们快速定位问题。

不过,为了更精确地复现和分析问题,有以下几点需要您补充:

  • BUG 描述可以更精确:您提到 uni.downloadFile 返回的临时文件路径后缀“不对”,以及 <image> 组件长按“保存不了”。核心问题我们已经理解,即 URL 末尾的 /watermark_hua_pic_info 被当作了文件后缀,导致系统无法识别其真实图片格式。这个指向非常明确。
  • 代码示例是完整的:您提供的 uni.downloadFile<image> 组件代码可以直接用于复现问题,无需额外调整。
  • 复现步骤是清晰的:结合您提供的代码和 URL,我们可以在鸿蒙设备上直接执行下载和长按保存操作,复现步骤有效。
  • 预期结果是合理的:您期望下载后的临时文件能保留正确的图片后缀(如 .jpg),并能成功保存到相册,这是一个完全合理的需求。
  • 实际结果是真实的问题表现:您反馈的实际结果(后缀变为 watermark_hua_pic_info,无法保存相册)是与预期不符的异常行为,属于一个有效的 bug 反馈,而非误报。阿里云OSS的图片处理样式确实会导致URL不以常规图片后缀结尾。
  • 分类信息非常完整:您提供了 HBuilderX 版本(5.07)、运行平台(HarmonyOS NEXT 6.0.0)、设备信息等,这对于我们分析平台特定问题至关重要。

2. Bug 是否成立分析

根据知识库内容和问题描述,此 Bug 成立

  • 根本原因定位:这不是一个通用问题,而是 uni-app 在鸿蒙平台上的一个适配缺陷uni.downloadFile API 在处理下载文件时,其文件后缀的确定逻辑过于简单,直接使用了 URL 最后一个 / 后的内容作为文件名和后缀。当遇到阿里云OSS这种带样式参数(如 /watermark_hua_pic_info)的 URL 时,就会错误地将样式名当成文件后缀。
  • 知识库依据
    • uni.downloadFile 的文档中,并未说明鸿蒙平台有此特殊限制或行为。
    • 社区(ask)中有类似反馈,如 DCloud问答_104112DCloud问答_145436,都提到了下载无后缀名的文件后,调用 uni.saveImageToPhotosAlbum 保存失败的问题。这印证了系统保存图片到相册时,依赖文件后缀来判断文件类型,错误的后缀会导致保存失败。
  • 结论:这是一个需要官方在后续版本中修复的兼容性问题。我们将此问题标记为 Bug,并反馈给相关开发同学进行修复。

3. 临时替代方案

在官方修复此问题前,您可以尝试以下几种方案来规避此问题:

  1. 方案一:为 downloadFile 指定 filePath(推荐)
    这是最直接有效的方案。在调用 uni.downloadFile 时,明确指定一个带正确后缀的本地存储路径。

    uni.downloadFile({  
        url: "https://hua5oss.oss-cn-hangzhou.aliyuncs.com/admin_uploads/image/2024/09/13/d2f4894d1e5b30b12126f69da0999120.JPG/watermark_hua_pic_info",  
        filePath: `${uni.env.USER_DATA_PATH}/temp_image.jpg`, // 明确指定文件名和后缀  
        success: (res) => {  
            console.log('下载成功,路径为:', res.filePath);  
            // 此时 res.filePath 就是您指定的路径,后缀为 .jpg  
            // 可以直接用于保存到相册  
            uni.saveImageToPhotosAlbum({  
                filePath: res.filePath,  
                success() {  
                    console.log('保存成功');  
                }  
            });  
        },  
        fail: (err) => {  
            console.error('下载失败', err);  
        }  
    });  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

  2. 方案二:使用插件市场中的原生插件
    如果方案一无法满足您的需求,可以尝试使用鸿蒙原生插件来直接处理网络图片的保存。例如,在插件市场中搜索相关插件:媒体文件保存到公共相册媒体文件保存到相册,这些插件可能提供了更底层的处理方式,能绕过此限制。

再次感谢您的详细反馈,这对我们改进产品非常有帮助。我们会跟进此问题的修复,您可以通过 issues 系统 关注进展。

内容为 AI 生成,仅供参考

要回复问题请先登录注册