今天在在用laravel框架寫一個文件上傳的部分.
發(fā)現(xiàn)路徑始終配不對.但是最終還是解決了.下面我分享一下自己的學(xué)習(xí)體會吧.客戶端
提交到服務(wù)器端.
$file = Input::file('myfile');
if($file -> isValid()){? ? //檢驗一下上傳的文件是否有效.? ??
$clientName = $file -> getClientOriginalName();? ??
$tmpName = $file ->getFileName(); // 緩存在tmp文件夾中的文件名 例如 php8933.tmp 這種類型的.??
$realPath = $file -> getRealPath();? ? //這個表示的是緩存在tmp文件夾下的文件的絕對路徑? //例如我的是: G:\xampp\tmp\php5A69.tmp? //這里要注意,如果我使用接下來的move方法之后, getRealPath() 就找不到文件的路徑了.因為文件已經(jīng)被移走了.? 所以這里道出了文件上傳的原理,將文件上傳的某個臨時目錄中,然后使用Php的函數(shù)將文件移動到指定的文件夾.??
$entension = $file -> getClientOriginalExtension(); //上傳文件的后綴.? ??
$mimeTye = file -> getMimeType();//大家對mimeType應(yīng)該不陌生了. 我得到的結(jié)果是 image/jpeg.? //這里要注意一點,以前我們使用 mime_content_type() ,在php5.3 之后,開始使用 fileinfo 來獲取文件的mime類型.所以要加入 php_fileinfo的php拓展.windows下是 php_fileinfo.dll,在php.ini文件中將 extension=php_fileinfo.dll前面的分號去掉即可.當(dāng)然要重啟服務(wù)器.??
最后我們使用? $path = $file -> move('storage/uploads');? 如果你這樣寫的話,默認(rèn)是會放置在 我們 public/storage/uploads/php79DB.tmp? ? 貌似不是我們希望的,如果我們希望將其放置在app的storage目錄下的uploads目錄中,并且需要改名的話..??
$path = $file -> move(app_path().'/storage/uploads',$newName);? 這里app_path()就是app文件夾所在的路徑.
$newName 可以是你通過某種算法獲得的文件的名稱.主要是不能重復(fù)產(chǎn)生沖突即可.? 比如 $newName = md5(date('ymdhis').$clientName).".".$extension;??
利用日期和客戶端文件名結(jié)合 使用md5 算法加密得到結(jié)果.不要忘記在后面加上文件原始的拓展名.? 好吧.開始本來想寫程序的,現(xiàn)在搞成這幅德行了..??
Best Wishes.}