2009-12-23 16 views
7

जब कोई फ़ाइल कहती है कि ब्राउज़र से 100 एमबी आकार अपलोड किया गया है, तो वसंत में अस्थायी रूप से डिस्क में स्मृति या स्टोर में संपूर्ण डेटा हो जाएगा। स्प्रिंग डॉक्टर के माध्यम से जाने के बाद मुझे पता है कि एक temp dir कैसे सेट करें, लेकिन मैं जानना चाहता हूं कि अगर मैं इसका उल्लेख नहीं करता तो क्या होगा।क्या स्प्रिंग डिस्क में स्मृति या स्टोर में सामग्री रखेगी?

Am होने निम्नलिखित घोषणा:

<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 

बीन:

public class FileHolder { 

    private MultipartFile file; 

    public void setFile(MultipartFile file) { 
     this.file = file; 
    } 

    public MultipartFile getFile() { 
     return file; 
    } 
} 

ऊपर सेम में "फाइल" उद्देश्य यह है कि 100 एमबी डेटा रखा जाएगा?

उत्तर

10

javadoc में थोड़ा अधिक खुदाई से पता चलता है कि डिफ़ॉल्ट अधिकतम मेमोरी आकार 10240 बाइट है। उस से मैं मानता हूं कि स्मृति में 10kb से कम कोई भी अपलोड किया जाता है, डिस्क पर कुछ भी बड़ा संग्रहित किया जाएगा। यदि आप डिस्क स्थान निर्दिष्ट नहीं करते हैं, तो यह संभवतः डिफ़ॉल्ट का उपयोग करेगा (मुझे लगता है कि यह सिस्टम डिफ़ॉल्ट tmp निर्देशिका का उपयोग करेगा)।

2

यदि आप temp निर्देशिका सेट नहीं करते हैं CommonsMultipartResolver अस्थायी फ़ाइलों को सर्वलेट कंटेनर की अस्थायी निर्देशिका में सहेज लेगा।

आपके उदाहरण में "फ़ाइल" ऑब्जेक्ट उस डेटा को java.io.File संदर्भ के समान नहीं रखता है। आपको file.getBytes() के साथ डेटा प्राप्त करने की आवश्यकता है।

2

हां, लेकिन अगर यह डिस्क पर संग्रहीत है तो अनुरोध संसाधित होने के बाद हटा दिया जाएगा। आप सीमा निर्धारित कर सकते हैं जब के लिए यह डिस्क पर संग्रहीत किया जाएगा:

अपने multipartresolver सेम परिभाषा में, उदाहरण के लिए:

<property name="maxUploadSize" value="1000000" /> 
<property name="maxInMemorySize" value="1000" /> 

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