2013-04-14 5 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에서 사용할 수있는 기능을 보았고, 나에게도 나에게 phpgoJnLc 같은 기능을 제공하는 빈 문자열과 getFilename을 제공 getExtension을 시도했습니다.

그런 다음 나는 인터넷에 주위를 둘러 보았다 그들이 이런 짓을 Laravel 3에서 코드의 몇 부분을 발견 :

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

그러나이 결과는 내게 만 결과를 줄입니다 Str::random(20) 다음에 도트가옵니다. 다시 말하지만, 파일 확장자가 없습니다.

그래서 내가 뭘 잘못하고 있니? Laravel 4로 파일을 업로드하는 방법은 무엇입니까? 당신이 당신의 클라이언트가 설정 원래 이름을 유지 원하는 ssuming AIS 나는 getClientOriginalName() 기능을 참조 같은 클래스 파일에서 찾고

답변

17

...

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

... ... 이는 위험 할 수있다 , 내 충고가 될 몇 가지 안전 검사를해라. 확장명 만 가져 오는 것은 ->getClientOriginalExtension()으로 이루어 지므로 &의 부분을 move() 함수의 두 번째 인수 앞에 임의의 문자열을 추가하여 저장할 수 있습니다.

또한과 같이 원본 파일의 확장자를 가진 파일 이름을 생성 할 수 있습니다
+0

내 친구, 내 하루를 저장했습니다. 나는 그것을 어떻게 보지 못했습니까? 고마워요! – Crinsane

0

:

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

당신이 얻을 것이다 : 당신이 Laravel 4 다음 사용하려고하면

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

오류 :

1

이것은 특히 나를 위해 일하는 uplo 첨부 된 이미지 :

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

@ pathors.thank. – iCoders