thinkphp5.0.5怎么自定义命名上传文件

thinkphp5.0.5怎么自定义命名上传文件,第1张

ThinkPHP5.0内置了一个文件处理烂败类 \think\File,缓行内置的文件上传 *** 作也是调用了该类进行处理的。

File类继承了PHP的SplFileObject类,因此可以调用SplFileObject类所有的属性和方法。

表单代码:

<form action="/index/index/upload" enctype="multipart/form-data" method="post">

<input type="file" name="image" /> <br> 

<input type="submit" value="上传" /> 

</form>

控制器代码:

public function upload(){

    // 获取表单上传文件 例如上传了001.jpg

    $file = request()->file('image')

    // 移动到框架应用根目录/public/uploads/ 目录下

    $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads')

    if($info){

        // 成功上传后 获取上传信息

        // 输出 jpg

        echo $info->getExtension()

        // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg

        echo $info->getSaveName()

        // 输出 饥哪颤42a79759f284b767dfcb2a0197904287.jpg

        echo $info->getFilename() 

    }else{

        // 上传失败获取错误信息

        echo $file->getError()

    }

}

move方法成功的话返回的是一个SplFileInfo对象,你可以对上传后的文件进行后续 *** 作,比如改名。

重复上传问题其实很好解决,下面提供两个简单的思路,请按需求选取。

1、银数行简单的但风险比较大【适合新增 *** 作,不适合修改 *** 作】。可以使用命名规则进行判断是否已上传。

举个简单的例子,如上传的按钮毕猛name="file",那命名的时候就以这个字段来命名,

如:file-{$date}.png

$date=date('Y-m-d')//当天的日期

$fileimg = "file-{$date}.png"//上传的图片命名

这个方法虽然不是特别准确的覆盖,但是在一定程度上做到了覆盖。

如果你这个图片是不变的,类似logo类型的图片,那直接命名为logo.png,这样每次提交都会覆盖原来的图片,不会重复。

注意:这个覆盖 *** 作会把原来的图片覆盖了,也就是没办法恢复原来的图片。

2、修改 *** 作的时候,只有确定提交了才覆盖。

这个 *** 作比较复杂一点,简单说说就是修改的时候,上传的图片命名规则跟方法1一样,也就是每次修改的图片重复覆盖,但是不覆盖原来的图片,用户确定提交后再删除原来的图锋哗片,将图片路径换为新上传的图片路径。流程图如下:

//用户修改信息

上传图片----上传图片命名:file_tmp.png----注意:这个图片命名跟原图片命名不同

多次重复上传修改---图片重复覆盖file_tmp.png

//用户最终确定上传图片

后台处理程序,获取图片的路径,unlink原来的图片路径(再次跟据修改的ID查询到图片路径,

进行删除),修改获取的图片命名rename将file_tmp.png改为file.png,将新的文件路径提交

更新。

以上就是两种处理图片重复的问题,希望能够帮助到你。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12168872.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存