专栏首页胡六娃的博客PHP上传文件仿微信文件名命名

PHP上传文件仿微信文件名命名

在做文件上传时遇到一个需求,上传时判断文件名称是否重复,如果重复则在后面标记数字,重新命名后继续上传。

比如文件名为“测试.jpg”,上传时假如该文件存在,则改名为“测试(1).jpg”上传。

下面为代码展示

效果图

   public function uploadFile(Request $request)
    {
        // $data = json_decode(file_get_contents("php://input"), true);
        $userId = request()->userid;
        if (!$userId) return $this->responseJson(self::CODE_USER_NOT_EXIST, trans('api.user.notExist'));
        $file = $request->file('file');
        Log::channel('notify')->info($file);
        //获取文件名 
        $fileName = $file->getClientOriginalName();
        $fileSize = $file->getClientSize();
        $fileType = $file->guessClientExtension();
        $path = 'upload\\' . $userId . '\\';

        //判断文件是否存在
        $exists = Storage::disk('public')->exists($path . $fileName);

        if ($exists) {
            //存在,改名
            $houzhui = '.' . substr(strrchr($fileName, '.'), 1);
            $result = substr($fileName, 0, '-' . strlen($houzhui));
            for ($i = 1; $i < 1000; $i++) {
                $saveName = iconv("utf-8", "gb2312", $result . '(' . $i . ')' . $houzhui);
                $exists = Storage::disk('public')->exists($path . $saveName);
                if (!$exists) {
                    $fileName =  $result . '(' . $i . ')' . $houzhui;
                    $name = $result . '(' . $i . ')' . $houzhui;
                    break;
                }
            }
        }

        $upload = $request->file('file')->storeAs(
            'public',
            $path . $fileName
        );

    } 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 根据文件大小自动判断单位B,KB,MB,GB

    用户4973967
  • window下安装docker

    下载地址:最新版 Toolbox 下载地址: https://www.docker.com/get-docker

    用户4973967
  • mui点击加载,下拉刷新,上下整合代码

    用户4973967
  • 优秀的开发者从命名开始

    如何码出高质量的代码呢?其实命名也没有那么难,关键看你重不重视,愿不愿意花时间。以下是课程笔记和阿里巴巴的开发手册中觉得适用的部分,分享出来。

    李明成
  • 基础知识 | 每日一练(174)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    小林C语言
  • Java-初级编码规范

    良好的编码规范和习惯会让你的代码锦上添花,同时也会大大的增加团队协作开发的效率,避免很多细节的问题,从而大大的提高你的代码的可阅读性,同时也是一个优秀开发者的必...

    老九学堂-小师弟
  • 小白的大数据笔记——1

    批处理非常适合需要访问全套记录才能完成的计算工作。例如在计算总数和平均数时,必须将数据集作为一个整体加以处理,而不能将其视作多条记录的集合。这些操作要求在计算进...

    DifficultWork
  • 前端-在 css 中什么是好的注释?

    Robert C. Martin写的《Clean Code》是我读过的最好的编程书籍之一,若没有读过,推荐你将它加入书单。

    grain先森
  • Vim实现批量注释的方法

    调试代码的时候,免不了要批量注释/取消代码注释,很多IDE都有快捷键将你选中的…

    白凡
  • 大数据处理框架是怎样的原理

    处理框架和处理引擎负责对数据系统中的数据进行计算。虽然“引擎”和“框架”之间的区别没有什么权威的定义,但大部分时候可以将前者定义为实际负责处理数据操作的组件,后...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券