2013-04-16 7 views
10

मुझे ब्राउज़र से सर्वर पर फ़ाइल अपलोड करने की आवश्यकता है। मैं वसंत 3.2 का उपयोग अपने वेब ढांचे के रूप में करता हूं।वसंत अपलोड फ़ाइल की समस्याएं

इसलिए मैंने इस तरह अपना ऐप कॉन्फ़िगर किया।

1 - मैं web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <context-param> 
     <param-name>contextClass</param-name> 
     <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
    </context-param> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>racoonsoft.chaos.settings</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value></param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>admin/library</welcome-file> 
    </welcome-file-list> 

</web-app> 

2 मिला - MainConfig वर्ग

@Configuration 
@Import({WebConfig.class }) 
public class MainConfig { 
    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

    @Bean 
    public static ScheduledAnnotationBeanPostProcessor scheduledAnnotationBeanPostProcessor() { 
     return new ScheduledAnnotationBeanPostProcessor(); 
    } 

    @Bean 
    public static StandardServletMultipartResolver multipartResolver() { 
     StandardServletMultipartResolver resolver = new StandardServletMultipartResolver(); 
     return resolver; 
    } 
} 

3 - नियंत्रक बहुखण्डीय अपलोड

@Controller 
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB 
     maxFileSize=1024*1024*10,  // 10MB 
     maxRequestSize=1024*1024*50) 
public class FileUpload 
{ 
    public static final int UPLOAD_RESULT_OK = 100000; 
    @Autowired 
    BookDao book_dao; 

    @RequestMapping(value = "/admin/library/upload_file", method = RequestMethod.POST) 
    public String saveFiles(@RequestParam("file-file") MultipartFile file) throws IOException 
    { 
     if (!file.isEmpty()) 
     { 
      byte[] bytes = file.getBytes(); 
      return "redirect:caps/total_fail"; 
     } 
     else 
     { 
      return "redirect:caps/total_fail"; 
     } 
    } 
} 

4 को संभालने के लिए - jsp मैं कहाँ रखा मेरी फाइल सबमिट करने के लिए फॉर्म

...<form method="post" action="/admin/library/upload_file" enctype="multipart/form-data"> 
       <input type="text" name="name"/> 
       <input type="file" name="file-file"/> 
       <input type="submit"/> 
      </form>... 

जब मैं अपने प्रपत्र सबमिट मैं एक अपवाद

org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file-file' is not present 
    org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:202) 

मैं पता नहीं क्यों मिले मिला है। जब मैं @RequestParam annotaion को हटा देता हूं तो मुझे अपनी विधि को बुलाया जाता है लेकिन फ़ाइल पैरामीटर = शून्य। मेरी समस्या क्या है?

उत्तर

5

मैंने अपनी वसंत कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित जोड़कर इस समस्या को ठीक किया:

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

(त्रुटि मैं हो रही थी था "org.springframework.web.bind.MissingServletRequestParameterException: आवश्यक MultipartFile पैरामीटर 'myFile' मौजूद नहीं है

0

आपको अपने वेबैप के लिए MultipartFilter कॉन्फ़िगर करने की भी आवश्यकता है। अपने जावाडोक के अनुसार, यह मल्टीपार्ट रीसोलवर का उपयोग करके मल्टीपार्ट अनुरोधों को हल करता है (लेकिन आपके पास पहले से कॉन्फ़िगर किया गया है)। आपको फ़ाइल अपलोड को संभालने वाले नियंत्रक के अनुरोध पथ (भाग) के लिए इसे मैप करना होगा।

पहले, अपने web.xml को MultipartFilter जोड़ें:

<filter> 
    <filter-name>multipartFilter</filter-name> 
    <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class> 
</filter> 

इसके बाद, (का एक हिस्सा) यूआरएल फ़ाइल अपलोड स्वीकार करने की जरूरत है कि करने के लिए फिल्टर नक्शा:

<filter-mapping> 
    <filter-name>multipartFilter</filter-name> 
    <url-pattern>/admin/library/upload_file</url-pattern> 
</filter-mapping> 
+1

मुझे यकीन नहीं है कि मैं इसे कैसे कॉन्फ़िगर कर सकता हूं। क्या मुझे अपने web.xml में परिवर्तन करने की ज़रूरत है? या मुझे अपना खुद का फ़िल्टर मल्टीपार्टफ़िल्टर विस्तारित करना होगा और इसे /व्यवस्थापक/लाइब्रेरी/upload_file पर मानचित्रित करना होगा ?? – user2160696

+0

कॉन्फ़िगरेशन विवरण के लिए अद्यतन उत्तर देखें। – mthmulders

+2

अफसोस की बात है कि यह मदद नहीं की थी। मैंने उन दो भागों को जोड़ा, लेकिन अभी भी पैरामीटर के रूप में शून्य हो गया। – user2160696

2

मैं

@Override 
    protected void customizeRegistration(ServletRegistration.Dynamic registration) { 

     MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/",100000, 200000, 50000); 

     registration.setMultipartConfig(multipartConfigElement); 

    } 
1

@ user64141 सही है लेकिन जावा config का उपयोग कर यदि एक्सएमएल के बजाय ,

@Bean 
public MultipartResolver multipartResolver() { 
    return new CommonsMultipartResolver(); 
} 
संबंधित मुद्दे