uni-app 安卓调用uni.previewImage后长按保存带参数图片文件名相同导致覆盖

uni-app 安卓调用uni.previewImage后长按保存带参数图片文件名相同导致覆盖

操作步骤:

调用uni.previewImage预览图片  
长按图片  
点击“保存相册”  
再换另一张图片  
长按图片保存

预期结果:

相册里面出现两张图片

实际结果:

相册里只出现最后的那张,文件名为getPreviewPhotoes.jpeg

bug描述:

带参数的图片链接http://47.105.217.26:9998/file/getPreviewPhotoes?path=1620956245224_1620956234759.jpg  
保存下来的文件名都是getPreviewPhotoes,保存多张会被覆盖掉。
开发环境 版本号 项目创建方式
Windows 10家庭中文版 3.1.12 HBuilderX
Android 8.1
OPPO
oppo r11

更多关于uni-app 安卓调用uni.previewImage后长按保存带参数图片文件名相同导致覆盖的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 安卓调用uni.previewImage后长按保存带参数图片文件名相同导致覆盖的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是由于uni.previewImage在安卓平台保存网络图片时,会默认使用URL中的文件名作为保存到相册的文件名。当图片URL参数不同但文件名相同(都是getPreviewPhotoes)时,系统会认为这是同一文件而覆盖保存。

解决方案:

  1. 服务端修改文件名返回 在服务端确保每个图片返回不同的文件名,可以通过在URL中添加时间戳或唯一标识:
http://47.105.217.26:9998/file/getPreviewPhotoes?path=1620956245224_1620956234759.jpg&t=时间戳
  1. 使用uni.downloadFile + uni.saveImageToPhotosAlbum 通过代码控制下载和保存过程,自定义文件名:
// 下载图片
uni.downloadFile({
    url: '图片URL',
    success: (res) => {
        if (res.statusCode === 200) {
            // 保存到相册,可自定义文件名
            uni.saveImageToPhotosAlbum({
                filePath: res.tempFilePath,
                success: () => {
                    uni.showToast({title: '保存成功'});
                }
            });
        }
    }
});
  1. 使用plus.downloader管理下载 通过5+ API实现更精细的文件名控制:
const task = plus.downloader.createDownload(url, {
    filename: '_doc/downloads/自定义文件名.jpg'
}, (d, status) => {
    if (status === 200) {
        plus.gallery.save(d.filename);
    }
});
task.start();
回到顶部