簡體   English   中英

Laravel 4文件上傳

[英]Laravel 4 file upload

我正在嘗試上傳一些照片並使用Laravel功能構建來處理這些照片。 但我不能為我的生活弄清楚如何正確地做到這一點。 我已經能夠實際上傳一些內容,但我遇到了一些問題。 這是我現在的代碼:

如果查看文檔,發現這個函數: $file = Input::file('photo'); 我已經使用了這個函數, $file的內容變成了Symfony\\Component\\HttpFoundation\\File\\UploadedFile一個實例,正如文檔告訴我們的那樣,“擴展PHP SplFileInfo類並提供了各種方法與文件交互。“ http://laravel.com/docs/4.2/requests#files

然后我使用了這個函數Input::file('photo')->move($destinationPath); 應該只是服務器上所需文件夾中的文件。 它確實如此。 但現在出現了問題。 現在所有上傳的文件都有像phpgoJnLc這樣的文件名,沒有擴展名。

我查看了SplFileInfo可用的函數,並嘗試了getExtension ,它給了我一個空字符串和getFilename ,它也給了我像phpgoJnLc

然后我在互聯網上環顧四周,從Laravel 3中找到了一些代碼,他們做了類似這樣的事情:

$filename = Str::random(20) .'.'. File::extension(Input::file('photo.name'));

但結果是只給出了Str::random(20)后跟一個點的結果。 同樣,沒有文件擴展名。

那么,我做錯了什么? 如何使用Laravel 4上傳文件?

查看同一個類文件,我看到一個getClientOriginalName()函數...

$file = Input::file('photo');
$file->move($destinationPath,$file->getClientOriginalName());

... as ssuming你想要保留客戶設置的原始名稱......這可能是危險的,對它進行一些安全檢查將是我的建議。 僅使用->getClientOriginalExtension()來獲取擴展名,因此您也可以只保存該部分並在move()函數的第二個參數之前添加一個隨機字符串。

這對我有用,特別是當您想要更改上傳圖像的名稱時:

$filename = 'New_Name'.'.'.Input::file('photo')->getClientOriginalExtension();

您還可以使用原始文件擴展名為文件生成名稱,如下所示:

$filename = Str::random(20) . '.' . Input::file('image')->guessExtension();

如果您嘗試在Laravel 4中使用以下內容:

$filename = Str::random(20) .'.'. File::extension(Input::file('photo.name'));

你會收到這個錯誤:

'Call to undefined method Illuminate\Filesystem\Filesystem::guessExtension()'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM