php上传文件甚至文件名,Thinkphp5 自定义上传文件名

本文讲述了如何在ThinkPHP 5中实现文件上传时将文件名改为用户ID前缀,包括使用move()函数修改文件名,前端通过隐藏input获取文件名并传递,以及如何查找和修改ThinkPHP核心文件的操作。
摘要由CSDN通过智能技术生成

这几天在做tp5的上传文件模块,项目需求是要把文件名在上传之后修改为 用户名+原文件名的组合形式,在网上找了一会儿发现好像没有类似的文章。。。只好自己去研究研究了。

之前查看过看云上面的官方手册,文件上传那一块真的是讲的含糊,对于我们这个为了项目自学tp5的大学生来说到处都是知识盲区啊。

Tp5文件相关操作模块都在 thinkphp\library\think\File.php里面,我们找到第335行附近的move()函数

64b7b8b5772d5999ee0fd113a6718622.gif

/**

* 移动文件

* @access public

* @param string $path 保存路径

* @param string|bool $savename 保存的文件名 默认自动生成

* @param boolean $replace 同名文件是否覆盖

* @return false|File

*/

public function move($path, $savename = true, $replace = true){

64b7b8b5772d5999ee0fd113a6718622.gif

上面写的 $savename 是一个String或者bool类型,所以直接传入文件名或者文件名变量就行了

在自己的控制器代码里写上:

$saveName = 'Tom';$info = $file->move('./Upload',$saveName,false);

再上传一次就可以看到上传的文件已经被修改为了Tom。

b2e743a0037ab887413265eb30aeb155.png

存进数据库的名字也是Tom,说明文件名是完全改了的。

67abc437e33b0ee49ea88c8eb887e929.png

现在的需求是修改名字为:用户id_文件名,但是我获取文件的方法是使用request获取:

$file = request()->file('files');

研究了半天发现好像没有可以在存入服务器之前获取到 $file的文件名,我的解决办法是:在前端的form表单添加一个hidden的隐藏输入框:

通过js获取到要上传的文件名,再把隐藏输入框的内容用js修改为获取到的文件名:

var fileinfo = document.getElementById('files').files[0];//js获取文件名字

var name =fileinfo.name;var fileN = document.getElementById('file_name');

fileN.value= name;

这样再提交文件的时候就可以把文件名传到后台。

由此可得,需要什么功能直接去框架的文件里面去找,感觉比看手册详细多了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值