2013-04-14 5 views
7

Próbuję przesłać kilka zdjęć i obsłużyć to za pomocą funkcji Laravel. Ale nie potrafię dla mnie zrozumieć, jak to zrobić właściwie. Udało mi się przesłać coś, ale mam kilka problemów. Jest to kod mam teraz:Przesyłanie pliku Laravel 4

Jeśli spojrzał na dokumentacji i znalazł tę funkcję: $file = Input::file('photo'); mam używany tej funkcji, a co treść $file staje się instancją Symfony\Component\HttpFoundation\File\UploadedFile, który, jako dokumentacji mówi nam: "rozszerza klasę PHP SplFileInfo i zapewnia wiele różnych metod interakcji z plikiem." http://laravel.com/docs/4.2/requests#files

Potem użyłem tej funkcji Input::file('photo')->move($destinationPath);, która powinna, ale plik w wybranym folderze na serwerze. I tak się stało. Ale teraz pojawia się problem. Teraz wszystkie przesłane pliki mają nazwę pliku, na przykład phpgoJnLc, i bez rozszerzenia.

Szukałem na funkcjach dostępnych SplFileInfo i próbował getExtension które dają mi pusty ciąg i getFilename który również daje mi coś takiego phpgoJnLc.

Potem rozejrzał się w internecie i znalazłem kilka części kodu z laravel 3, gdzie zrobili coś takiego:

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

Ale efekt tego jest mi dać tylko wynik z Str::random(20), po którym następuje kropka. Ponownie, bez rozszerzenia pliku.

Co więc robię źle? Jak przesłać plik za pomocą Laravel 4?

Odpowiedz

17

Patrząc w tym samym pliku klasy widzę getClientOriginalName() funkcja ...

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

... co AIS ssuming chcesz zachować oryginalną nazwę klient ustawia ... co może być niebezpieczne , wykonaj jakieś kontrole bezpieczeństwa, to moja rada. Uzyskanie nazwy rozszerzenia jest możliwe tylko za pomocą ->getClientOriginalExtension(), więc można również zapisać tę część tylko w innym argumencie &, dodając losowy ciąg przed drugim argumentem funkcji move().

+0

Ty, mój przyjacielu, właśnie uratowałeś mój dzień! Jak tego nie widziałem ...? Dziękuję Ci bardzo! – Crinsane

0

Można również wygenerować nazwę pliku z oryginalnego rozszerzenia pliku tak:

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

jeśli spróbujesz użyć następujących w laravel 4:

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

dostaniesz to błąd:

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

To zadziałało dla mnie, zwłaszcza gdy chcesz zmienić nazwę wersji Aded image:

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

@ pathors.thank you. – iCoders