记录一下tp5更新图片的一些过程:
思路:将原来的图片删除并新增上传的图片 ;想到就做了
预览功能(重要部分代码):
css:
<style>
.button{padding:10px 15px;}
.btn-success{color: #0f77ea;border: 1px solid #0f77ea;}
.btn-success:hover{color: #fff;background-color:#0f77ea;}
</style>
html:
<!-- 上传图片预览 -->
<img src="" id="show" style="max-width:200px;margin: 0 10px">
<input id="file" type="file" name="imgFile" style="display: none" onchange="chang(this)" accept="image/*" />
<label for="file" class='button btn-success'>选择图片</label>
<!-- 原图片预览 由于要引入路径的,不引入可删除这两段代码 ↓,做预览就可以了 -->
<img src={$data.img_src} id="oldImg" style="max-width:200px;margin: 0 10px">
<input id="old" name="old" type="text" style="display: none;">
<script>
//将上传图片赋值转换 达到优化按钮外形 和 预览 的效果
function chang() {
var reads= new FileReader();
f=document.getElementById('file').files[0];
reads.readAsDataURL(f);
reads.onload=function (e) {
document.getElementById('show').src=this.result;
};
}
//img 路径赋值到 input 中
var va = document.getElementById('old');
va.value = document.getElementById('oldImg').src;
</script>
重点来了:
unlink($oldName); //删除旧文件
出现这种情况,因为在文件有一个unlink的private方法,但是不写$this则执行的是另外一个文件中的unlink方法。也因此才会出现类似unlink(xxx.jpg): No such file or directory的错误
解决方法:
找到文件:/thinkphp/library/think/cache/driver/File.php
然后重写unlink方法(拷贝到所在的控制器下的)
记得引入:use think\File;
/**
* 判断文件是否存在后,删除
* @param $path
* @return bool
* @author byron sampson <xiaobo.sun@qq.com>
* @return boolean
*/
private function unlink($path)
{
return is_file($path) && unlink($path);
}
最后在要删除的方法里引入:
$this ->unlink($oldName); //删除旧文件
参考来源:点我
网友评论