2017-10-17 16 views
9

मैं एक फ़ाइल लिखने के लिए Storage::put का उपयोग करना चाहता हूं। फ़ाइल संभावित रूप से बहुत बड़ी (> 100 एमबी) है, इसलिए मैं एक स्ट्रीम का उपयोग करना चाहता हूं इसलिए मैं अंधेरे से स्मृति में सब कुछ नहीं डालता।लाइन से लाइन लिखने के लिए मैं संसाधन का उपयोग कैसे कर सकता हूं लेकिन अभी भी लैरवेल के स्टोरेज में निर्मित का उपयोग कर सकता हूं?

मैं एकाधिक एपीआई अनुरोध करने जा रहा हूं, और उसके बाद अपने परिणामों के माध्यम से लूपिंग कर रहा हूं, इसलिए जो डेटा मैं वापस प्राप्त कर रहा हूं वह कोई मुद्दा नहीं है, यह समझदार मात्रा तक ही सीमित होगा।

documentation के अनुसार, मैं उपयोग करने की आवश्यकता:

Storage::put('file.xml', $resource); 

लेकिन क्या $resource यहाँ हो सकता है?

पारंपरिक रूप से PHP का उपयोग करते हुए फ़ाइलों को लिखते समय मैंने इसे 'लाइन द्वारा लाइन' लिखने के लिए fopen, fwrite और fclose के संयोजन के साथ किया है। मैं विभिन्न संग्रहों के माध्यम से लूपिंग करके फ़ाइल बना रहा हूं और विभिन्न एपीआई का उपयोग कर रहा हूं, इसलिए $resource एक फ़ाइल सूचक या फ़ाइल संदर्भ जैसा कि दस्तावेज़ में कहीं और बात की गई है।

तो, मैं स्ट्रीम और लैरवेल के Storage का उपयोग करके लाइन द्वारा लाइन कैसे लिख सकता हूं?

उत्तर

1
Storage::put('file.xml', $resource); 

लेकिन $ संसाधन यहां क्या होगा?

$ संसाधन आपका डेटा है जिसे आप कोड द्वारा डिस्क पर लिखने के लिए तैयार करते हैं।

आप एक पाश के साथ फ़ाइल में लिखने का रूप ljubadr से पहले लिखा था

मैं $ डेटा लिखा आप Storage::append($file_name, $data); का उपयोग करना चाहिए, लेकिन आप एक पाश के अंदर एक चर के लिए कोई भी नाम का उपयोग कर सकते हैं।

0

प्रति Laravel 5.3 documentation, स्वचालित स्ट्रीमिंग

पर गौर आप Laravel तरह स्वचालित रूप से putFile या putFileAs विधि, आप उपयोग कर सकते हैं अपने संग्रहण स्थान पर किसी दिए गए फ़ाइल स्ट्रीमिंग प्रबंधित करे, तो। इस विधि या तो एक Illuminate\Http\File या Illuminate\Http\UploadedFile उदाहरण स्वीकार करता है और स्वचालित रूप से अपनी इच्छा स्थान के लिए फ़ाइल स्ट्रीम होगा:

जहाँ आपके प्रपत्र इनपुट

है आप इस

$file = $request->file('file'); 
$path = \Storage::putFile('photos', $file); 

तरह स्ट्रीमिंग के साथ फाइल अपलोड कर सकते हैं

<input type="file" name="file"> 
+0

यदि आप अलग-अलग नाम से फ़ाइल अपलोड करना चाहते हैं, तो 'putFileAs' का उपयोग करें। – ljubadr

+0

'$ file' का उदाहरण है [अपलोडेडफाइल] (https://laravel.com/api/5.3/Illuminate/Http/UploadedFile.html), ताकि आप उपलब्ध विधियों के लिए वहां देख सकें – ljubadr

+0

मेरे प्रश्न के अनुसार, मैं हूं फ़ाइल अपलोड नहीं कर रहा है, और मैं किसी फ़ाइल को दूसरी फ़ाइल में स्ट्रीम नहीं कर रहा हूं। मैं एक सादे-पाठ फ़ाइल लिखने की कोशिश कर रहा हूं जिसे मैं स्ट्रीमिंग फैशन में कोड में बना रहा हूं।मैंने इसे 'fopen' और' fwrite' का उपयोग करके बहुत आसानी से लिखने में कामयाब रहा है, लेकिन अंतर्निहित 'स्टोरेज 'विधियों को प्राथमिकता देगा। मुझे लगता है कि यह संभव नहीं है। – Mike

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

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