2013-04-14 49 views
7

Bazı fotoğrafları yüklemeye çalışıyorum ve bunu Laravel işlevlerindeki yapı ile hallediyorum. Ama hayatım boyunca bunu nasıl yapacağımı anlayamıyorum. Aslında bir şey yükleyebildim, ama birkaç problemle karşılaştım. belgelere baktıysanızLaravel 4 dosya yükleme

ve bu işlevi bulundu: Bu şu anda var kodudur ben bu fonksiyonu kullandım $file = Input::file('photo'); ve ne $file içeriği haline Symfony\Component\HttpFoundation\File\UploadedFile örneğidir olduğu belgelere olarak hangi bize, "PHP SplFileInfo sınıfını genişletir ve dosyayla etkileşimde bulunmak için çeşitli yöntemler sağlar." http://laravel.com/docs/4.2/requests#files

Daha sonra bu işlevi Input::file('photo')->move($destinationPath); kullandım ancak bu dosya sunucudaki istenen klasörde olmalıdır. Ve yaptı. Ama şimdi sorun geliyor. Artık yüklenen tüm dosyaların bir uzantısı olmadan phpgoJnLc gibi bir dosya adı var.

ben SplFileInfo edinilebilir fonksiyonları bakıp bana da bana phpgoJnLc gibi şeyler verir boş bir dize ve getFilename vermek getExtension denedim.

Sonra internette etrafına baktı ve onlar böyle bir şey yaptım laravel 3, gelen birkaç kod parçası bulundu:

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

Ama bu sonucu bana sadece sonuç vermek Str::random(20) ardından bir nokta. Yine, dosya uzantısı yok.

Peki, ne yapıyorum yanlış? Laravel 4 ile dosya nasıl yüklenir? Eğer müşteri kılan özgün adını tutmak istiyorum ssuming AIS Ben getClientOriginalName() fonksiyonunu görmek aynı sınıf dosyasında Looking

cevap

17

...

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

... ... hangi tehlikeli olabilir , bazı güvenlik kontrolleri yapmak benim tavsiyem olurdu. Sadece uzantı almak ->getClientOriginalExtension() ile yapılır, bu nedenle move() işlevinin ikinci bağımsız değişkeninden daha önce rastgele bir dize eklemek için kaydedebilirsiniz.

Ayrıca şöyle orijinal dosya uzantısına sahip dosya için bir ad üretebilir
+0

Sen, dostum, günümü kurtardım! Bunu nasıl görmedim? Çok teşekkür ederim! – Crinsane

0

:

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

bu alacak: Eğer laravel 4 aşağıdaki kullanmaya çalışırsanız

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

hata:

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

Bu özellikle benim için çalıştı, özellikle de yukarı doğru değiştirmek istediğinizde görüntü eklenir:

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

@ pathors.thank sizi. – iCoders