uni-app uni.chooseImage 会持久保存图片,不是临时缓存。
uni-app uni.chooseImage 会持久保存图片,不是临时缓存。
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win11 | HBuilderX |
### 操作步骤:
- uni.chooseImage 选择图片,并使用uni.uploadFile上传
### 预期结果:
- uni.chooseImage 选择图片,并使用uni.uploadFile上传,应该清除掉临时缓存的图片
### 实际结果:
- uni.chooseImage 选择图片,并使用uni.uploadFile上传,缓存会持久保存到手机,重启应用也还在。
### bug描述:
选择图片后会保存在app的数据里files/DCIM,
应该自动清理掉这些图片吧。
我们的业务拍照多,那岂不是会存很大?
没有调用
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['camera'],
})
更多关于uni-app uni.chooseImage 会持久保存图片,不是临时缓存。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
您现在这个问题解决了吗?我也遇到了这个问题,频繁调用app,会导致文稿数据越来越大,没办法清除缓存,应用特别卡
更多关于uni-app uni.chooseImage 会持久保存图片,不是临时缓存。的实战教程也可以访问 https://www.itying.com/category-93-b0.html
频繁调用摄像头拍照,导致用户数据越来越多,重启应用也没有作用!
这个帖子上面说是解决了,你一直复现么,请把demo发一下可以么
回复 小枫叶: 我这边测试的是没有存储,不知道你是只有这个手机是这样,还是所有的手机都是这样呢
这个问题解决了么
同样遇到files/DCIM下图片增多问题
https://blog.csdn.net/qq_34685515/article/details/120074484。 可以看看这个文档,但是要区分正式环境和基座环境的图片路径。
根据你的描述,这确实是 uni-app 中 uni.chooseImage 方法在部分平台(尤其是App端)的一个已知行为。它并非严格意义上的“临时缓存”,而是将选择的图片文件持久化保存到了应用的私有目录中。
核心原因:
uni.chooseImage 方法在调用时,尤其是在App端,系统或框架需要将图片(无论是从相册选择还是相机拍摄)生成一个可供JavaScript安全访问的本地文件路径(如 file:// 开头)。这个过程通常涉及将图片复制到应用的沙盒目录(如 uniapp_temp 或 files/DCIM 等子目录)。这个文件默认不会在上传后自动删除。
你的理解是正确的: 如果业务中频繁拍照或选择图片,这些文件会持续累积,占用用户的存储空间。框架本身没有提供自动清理的机制,需要开发者手动处理。
解决方案:
你需要在 uni.uploadFile 上传成功(或确定不再需要该文件后)的回调中,手动删除由 chooseImage 生成的临时文件。
修改后的代码示例:
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['camera'],
success: (res) => {
const tempFilePaths = res.tempFilePaths; // 这是一个数组,即使一张图
const tempFilePath = tempFilePaths[0];
// 执行上传
uni.uploadFile({
url: '你的服务器地址',
filePath: tempFilePath,
name: 'file',
success: (uploadRes) => {
console.log('上传成功', uploadRes.data);
// !!!关键步骤:上传成功后,删除本地临时文件
// #ifdef APP-PLUS
plus.io.resolveLocalFileSystemURL(tempFilePath, (entry) => {
entry.remove(() => {
console.log('临时文件已删除');
}, (removeError) => {
console.error('删除临时文件失败:', removeError);
});
}, (resolveError) => {
console.error('解析文件路径失败:', resolveError);
});
// #endif
// 对于H5等平台,可以尝试使用URL.revokeObjectURL,但通常不需要处理物理文件。
},
fail: (uploadErr) => {
console.error('上传失败', uploadErr);
// 上传失败时,根据业务决定是否删除。例如,可以提示用户后删除。
}
});
}
});

