Thinkphp5 自定義上傳文件名


這幾天在做tp5的上傳文件模塊,項目需求是要把文件名在上傳之后修改為 用戶名+原文件名的組合形式,在網上找了一會兒發現好像沒有類似的文章。。。只好自己去研究研究了。

之前查看過看雲上面的官方手冊,文件上傳那一塊真的是講的含糊,對於我們這個為了項目自學tp5的大學生來說到處都是知識盲區啊。

Tp5文件相關操作模塊都在 thinkphp\library\think\File.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;    

 

這樣再提交文件的時候就可以把文件名傳到后台。

由此可得,需要什么功能直接去框架的文件里面去找,感覺比看手冊詳細多了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM