2013-04-14 27 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()); 

... जो ssuming आप चाहते मूल नाम अपने ग्राहक सेट रखने के लिए एआईएस ... जो खतरनाक हो सकता है , इस पर कुछ सुरक्षा जांच मेरी सलाह होगी। एक्सटेंशन नाम प्राप्त करना केवल ->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(); 

त्रुटि:

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

यह मेरे लिए काम करता है, खासकर जब आप ऊपर के नाम को बदलना चाहते हैं aded image:

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

@ पथर्स। धन्यवाद। – iCoders

संबंधित मुद्दे