2013-04-14 6 views
7

Я пытаюсь загрузить несколько фотографий и обработать их с помощью функций Laravel. Но я не могу за всю жизнь понять, как это сделать должным образом. Я действительно мог загрузить что-то, но у меня возникли проблемы. Это код, я прямо сейчас:Laravel 4 загрузка файла

Если смотреть на документацию, и нашел эту функцию: $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?

ответ

17

Глядя в том же файле класса я вижу getClientOriginalName() функцию ...

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

... который AiS ssuming вы хотите сохранить оригинальное имя устанавливает клиент ..., который может быть опасным , сделайте некоторые проверки безопасности, это будет моим советом. Получение имени добавочного номера выполняется только с ->getClientOriginalExtension(), поэтому вы также можете сохранить только эту часть &, чтобы добавить случайную строку до этого во втором аргументе функции move().

+0

Вы, друг мой, только что спасли мой день! Как я не видел этого ...? Большое спасибо! – Crinsane

0

Вы также можете создать имя файла с исходным расширением файла, как так:

$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()' 
1

Это сработало для меня, особенно если вы хотите изменить название uplo aded image:

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

@ патологи. – iCoders

Смежные вопросы