2012-07-11 13 views
5

मैंने this अपाचे गाइड के माध्यम से स्ट्रीमिंग फ़ाइल अपलोड करने के तरीके पर निफ्टी गाइड देखा। यह मुझे सोच रहा है कि डेटा कहां संग्रहीत किया जाता है? और क्या उस स्थान को "बंद" या "साफ" करना आवश्यक है?Apache Commons के माध्यम से स्ट्रीमिंग फ़ाइल अपलोड के दौरान संग्रहीत डेटा कहां रखा जाता है?

धन्यवाद!

उत्तर

5

जहां डाटा संग्रहित किया जाता है?

मुझे नहीं लगता कि यह संग्रहीत है। स्ट्रीमिंग एपीआई DiskFileItemFactory का उपयोग नहीं करता है। लेकिन यह डेटा को कॉपी करने के लिए बफर का उपयोग करता है क्योंकि बलुस ने पोस्ट किया है। एक बार जब आप अपलोड की धारा है, तो आप API

3

यहाँ DiskFileItemFactory के लिए जावाडोक है।

डिफ़ॉल्ट FileItemFactory कार्यान्वयन। यह कार्यान्वयन फ़ाइलइटेम उदाहरण बनाता है जो छोटी सामग्री के लिए या तो डिस्क पर अस्थायी फ़ाइल में, या तो स्मृति में स्मृति में अपनी सामग्री को रखता है। आकार सीमा है, जो उपरोक्त सामग्री डिस्क पर संग्रहीत किया जाएगा, विन्यास योग्य है के रूप में निर्देशिका जिसमें अस्थायी फ़ाइलों बनाया होगा।

Size threshold is 10KB. 
Repository is the system default temp directory, as returned by System.getProperty("java.io.tmpdir"). 

अस्थाई फ़ाइलें, जो फ़ाइल मदों के लिए बनाई गई हैं, हटा दिया जाना चाहिए बाद में:

हैं अन्यथा नियोजित नहीं है, डिफ़ॉल्ट कॉन्फ़िगरेशन मान के रूप में इस प्रकार हैं। ऐसा करने का सबसे अच्छा तरीका FileCleaningTracker, का उपयोग कर रहा है जिसे आप DiskFileItemFactory पर सेट कर सकते हैं। हालांकि, यदि आप ऐसे ट्रैकर का उपयोग करते हैं, तो आपको निम्न पर विचार करना चाहिए: अस्थायी फ़ाइलें जैसे ही उनकी आवश्यकता नहीं होती है, स्वचालित रूप से हटा दी जाती है। (अधिक ठीक है, जब फ़ाइल की इसी उदाहरण कचरा है एकत्र।) यह तथाकथित काटनेवाला धागा है, जो है स्वचालित रूप से शुरू कर दिया जब वर्ग FileCleaner भरी हुई है द्वारा किया जाता है। यह उस थ्रेड को समाप्त करने के लिए समझ में आता है, उदाहरण के लिए, यदि आपका वेब एप्लिकेशन समाप्त होता है। कॉमन्स-फ़ाइल अपलोड के उपयोगकर्ताओं मार्गदर्शिका में "संसाधन सफाई" पर अनुभाग देखें।

तो, हाँ close और cleanup, आवश्यक हैं के रूप में FileItem डिस्क पर कोई वास्तविक फ़ाइल को निरूपित कर सकते हैं।

+0

पर

long bytesCopied = Streams.copy(yourInputStream, yourOutputStream, true); 

देखो उपयोग कर सकते हैं मुझे ठीक कर लें im गलत है, लेकिन स्ट्रीमिंग एपीआई किसी भी DiskFileItemFactory वस्तुओं का उपयोग नहीं करता। या इसका उपयोग निहित है? – user571099

+0

@ user571099। यदि आप अपने प्रश्न के लिंक का पालन करते हैं और उस पृष्ठ के शीर्ष पर 'उपयोगकर्ता मार्गदर्शिका' पर क्लिक करते हैं, तो आप देखेंगे कि DiskFileItemFactory का उपयोग कैसे किया जाता है। –

+0

@Alexander Pogrebnyak, मुझे लगता है कि उपयोगकर्ता571099 सही है। उपयोगकर्ता मार्गदर्शिका फ़ाइल अपलोड के पारंपरिक विधि (सामान्य-फ़ाइल अपलोड का गैर-स्ट्रीमिंग तरीका) को संदर्भित करती है, जिसके लिए थ्रेसहोल्ड आकार से परे फ़ाइलों के लिए अस्थायी फ़ोल्डर की आवश्यकता होती है। फ़ाइलों को हटाने की जरूरत है, वैसे ही इस उद्देश्य के लिए रबर धागा है।स्ट्रीमिंग एपीआई में, हम स्ट्रीम एपीआई में डिस्कफाइल इटैम का उपयोग नहीं करते हैं, आप उदाहरण उपयोग देख सकते हैं, जो DiskFileItemFactory का उपयोग नहीं करते हैं। मूल प्रश्न का उत्तर देने के लिए, डेटा को बाइट [] के रूप में स्मृति में संग्रहीत किया जाता है, और हां आपको इनपुटस्ट्रीम को बंद करने की आवश्यकता होती है। स्वीकृत उत्तर सही है। –

2

यह जावा स्मृति में एक byte[] के रूप में जमा है।

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