加入收藏 | 设为首页 | 会员中心 | 我要投稿 四平站长网 (https://www.0434zz.com.cn/)- 云服务器、对象存储、基础存储、视频终端、数据应用!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Thinkphp5 自定义上传文件名

发布时间:2022-08-02 14:26:34 所属栏目:PHP教程 来源:互联网
导读:这几天在做tp5的上传文件模块,项目需求是要把文件名在上传之后修改为 用户名+原文件名的组合形式,在网上找了一会儿发现好像没有类似的文章。。。只好自己去研究研究了。 之前查看过看云上面的官方手册,文件上传那一块真的是讲的含糊,对于我们这个为了项
  这几天在做tp5的上传文件模块,项目需求是要把文件名在上传之后修改为 用户名+原文件名的组合形式,在网上找了一会儿发现好像没有类似的文章。。。只好自己去研究研究了。
 
  之前查看过看云上面的官方手册,文件上传那一块真的是讲的含糊,对于我们这个为了项目自学tp5的大学生来说到处都是知识盲区啊。
 
  Tp5文件相关操作模块都在 thinkphplibrarythinkFile.php里面,我们找到第335行附近的move()函数
 
  复制代码
    
 
  /**
  * 移动文件
  * @access public
  * @param string $path 保存路径
  * @param string|bool $savename 保存的文件名 默认自动生成
  * @param boolean $replace 同名文件是否覆盖
  * @return false|File
  */
 
     public function move($path, $savename = true, $replace = true){
 
  复制代码
  上面写的 $savename 是一个String或者bool类型,所以直接传入文件名或者文件名变量就行了
 
  在自己的控制器代码里写上:
 
  $saveName = 'Tom';
  $info = $file->move('./Upload',$saveName,false);
  再上传一次就可以看到上传的文件已经被修改为了Tom。
 
 
 
   
 
  存进数据库的名字也是Tom,说明文件名是完全改了的。
 
 
 
   
 
  现在的需求是修改名字为:用户id_文件名,但是我获取文件的方法是使用request获取:
 
  $file = request()->file('files');
  研究了半天发现好像没有可以在存入服务器之前获取到 $file的文件名,我的解决办法是:在前端的form表单添加一个hidden的隐藏输入框:
 
  <input type="hidden" name="fileName" id="file_name">
   
 
  通过js获取到要上传的文件名,再把隐藏输入框的内容用js修改为获取到的文件名:
 
  var fileinfo = document.getElementById('files').files[0];
  //js获取文件名字
  var name = fileinfo.name;
  var fileN = document.getElementById('file_name');
  fileN.value = name;    
   
 
  这样再提交文件的时候就可以把文件名传到后台。
 
  由此可得,需要什么功能直接去框架的文件里面去找,感觉比看手册详细多了!

(编辑:四平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读