Загрузка файла Laravel 4

Я пытаюсь загрузить несколько фотографий и обработать это с помощью встроенных функций 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?


person Crinsane    schedule 14.04.2013    source источник


Ответы (3)


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

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

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

person Wrikken    schedule 14.04.2013
comment
Ты, мой друг, только что спас мой день! Как я этого не увидел...? Большое спасибо! - person Crinsane; 14.04.2013

Это сработало для меня, особенно когда вы хотите изменить имя загруженного изображения:

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

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

$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()'
person Moe    schedule 24.12.2013