这几天在做tp5的上传文件模块,项目需求是要把文件名在上传之后修改为 用户名+原文件名的组合形式,在网上找了一会儿发现好像没有类似的文章。。。只好自己去研究研究了。
之前查看过看云上面的官方手册,文件上传那一块真的是讲的含糊,对于我们这个为了项目自学tp5的大学生来说到处都是知识盲区啊。
tp5文件相关操作模块都在 thinkphp\library\think\file.php里面,我们找到第335行附近的move()函数
/**
* 移动文件
* @access public
* @param string $path 保存路径口技原文
* @param string|bool $savename 保存的文件名 默认自动生成
* @param boolean $replac老志行e 同名文件是否覆盖
* @return fal|file
15分钟英语 */
public function张先会 move($path, $savename = true, $replace = true){
上面写的 $savename 是一个string2021年教师节或者bool类型,所以直接传入文件名或者文件名变量就行了
在自己的控制器代码里写上:
$savename = 'tom';$info = $file->move('./upload',$savename,fal);
再上传一次就可以看到上传的文件已经被修改为了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;
这样再提交文件的时候就可以把文件名传到后台。
由此可得,需要什么功能直接去框架的文件里面去找,感觉比看手册详细多了!
本文发布于:2023-04-07 12:03:43,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ea04d5b1c06da3deaf51cf22f5bb5470.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Thinkphp5 自定义上传文件名.doc
本文 PDF 下载地址:Thinkphp5 自定义上传文件名.pdf
留言与评论(共有 0 条评论) |