2013-02-17 52 views
12

के साथ स्प्रिंग एमवीसी एकाधिक फ़ाइल अपलोड मैं वसंत 3.1.2 का उपयोग कर एकाधिक फ़ाइलों को @ कंट्रोलर और @RequestMapping के साथ अपलोड करने की कोशिश कर रहा हूं।एचटीएमएल 5 एकाधिक फ़ाइल फॉर्म फीचर

यहां मैंने जो किया और मेरी कॉन्फ़िगरेशन।

Html5 प्रपत्र:

<form action="addFileSystemImage.foo" method="post" enctype="multipart/form-data"> 

    <input class='fileInput' type="file" name="files[]" multiple="multiple" /> 

    <input type="text" value="13asdf12eadsf" name="locId"/> 

    <input type="submit" /> 

</form> 

नियंत्रक विधि:

@RequestMapping(value="/publisher/addFileSystemImage.foo", method=RequestMethod.POST) 
public @ResponseBody List<UploadedFile> addFileSystemImage(@RequestParam("files[]") ArrayList<MultipartFile> files, String locId, HttpServletRequest request) { 

//do lotsa voodoo rocket science here to process the files 

} 

मेरी conf:

<mvc:annotation-driven /> 
<context:component-scan base-package="foo.package"></context:component-scan> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> 

प्रपत्र को जमा addFileSystemImage विधि करने के लिए मिलता है। LocId तर्क के लिए डेटा यहां है, लेकिन "फ़ाइलें" तर्क बाध्य नहीं है। यह व्यवस्थित रूप से शून्य है चाहे कोई भी तर्क/फ़ील्ड नाम/तर्क प्रकारों का संयोजन जो मैंने कोशिश की है।

HttpServletRequest तर्क एक org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest है और इसमें एक बहुपक्षीय विशेषता है जो वास्तव में फ़ाइल डेटा रखती है। डिबग में अपने मूल्य को देखते हुए मुझे देता है

{files[]=[[email protected]6afd7f9, [email protected]28c2811, [email protected]f9aaed7]} 

जिसका अर्थ है अपनी फ़ाइलें [] वास्तव में यहाँ है ... लेकिन किसी भी तरह यह कदम ठीक से बाध्यकारी डेटा पास नहीं था ...

अब ... मैं पता है कि आप मुझे बताएंगे कि मैं अनुरोध से डेटा पुनर्प्राप्त कर सकता हूं ... लेकिन मैं इसे ठीक से काम कर रहा हूं ... सरिंग तरीका ... :) और मल्टीपार्टफाइल का मेरा ऐरेलिस्ट ठीक से आबादी वाला है।

मैं कुछ याद आ रही है? क्या किसी ने वास्तव में यह काम ठीक से किया है? इस ArrayList (या यहां तक ​​कि एक नियमित ऐरे) populated करने के लिए मैं क्या कर सकता हूँ?

मैं इस समाधान के पार Spring MVC with ajax file upload and MultipartFile पर आया जो कि मैं काफी कुछ करता हूं लेकिन स्पष्ट रूप से मुझे कुछ गलत करना होगा क्योंकि यह समाधान मेरे लिए काम नहीं कर रहा है।

नोट: मैंने इसे एकल फ़ाइल अपलोड के साथ काम करने का प्रबंधन किया था। लेकिन आज मेरी चुनौती एक साथ कई फाइलें प्राप्त करना है।

किसी भी मदद की सराहना की।

अग्रिम धन्यवाद।

+9

क्या आपने "फाइल" तर्क को सूची या मल्टीपार्ट [] फ़ाइलों के रूप में घोषित करने का प्रयास किया था? मुझे नहीं लगता कि स्प्रिंग बैकिंग सूची एक ऐरेलिस्ट है और शायद स्प्रिंग विफल हो जाती है जब स्प्रिंग विधि तर्कों को बांधने की कोशिश करता है। –

+0

मैं अतीत में इस तरह काम करने में कामयाब रहा। मुझे याद है कि आपको अपने पोम में कॉमन्स-फाइलअपलोड निर्भरता भी शामिल करनी होगी। शायद कोशिश करो? – gerrytan

+0

बेवकूफ़ मुझे ... यह सूची और ऐरे के साथ काम किया ... मैंने सभी परीक्षणों के दौरान जो किया उसके बारे में मैंने ट्रैक किया होगा ... धन्यवाद एलेक्स। आप सवाल का जवाब दे सकते हैं और यदि आप चाहें तो मैं आपको बता दूंगा। चीयर्स! – azpublic

उत्तर

0

इसमें कॉमन्स-फ़ाइल अपलोड लोड निर्भरता शामिल है?

<dependency> 
    <groupId>commons-fileupload</groupId> 
    <artifactId>commons-fileupload</artifactId> 
    <version>1.3</version> 
</dependency> 

मैं fileupload भी नियंत्रक हैंडलर

5

हालांकि आप पहले से ही एलेक्स का जवाब धन्यवाद मिल गया है पर पैरामीटर प्रकार के रूप में ArrayList के साथ ठीक काम करता है परीक्षण किया है, मैं तो बस थोड़ा विस्तार से बता करना चाहते हैं। वसंत बाध्यकारी के साथ, फार्म फ़ील्ड HTML में उनके "नाम" विशेषताओं से बंधे हैं। चूंकि फॉर्म फ़ील्ड फ़ाइलों का नाम असंभव है [] (यदि कोई उस वाक्यविन्यास के साथ एक परिवर्तनीय नाम घोषित करता है, तो इसका नाम फाइल है, लेकिन यह घोषणा प्रकार की एक सरणी है), वसंत इसे मेल नहीं कर सका - और उस मामले में व्यवहार अनुरोध में डेटा को नजरअंदाज करना है।

private List<MultipartFile> files; 
private MultipartFile[] files; 
उचित getters और setters के साथ

, तो पहुँच आप कर सकते हैं और फ़ाइल उत्परिवर्तित:

ऐसे MultipartFile के रूप में एक प्रकार का उपयोग करना, आप या तो एक सूची नामित "फ़ाइलें" या निम्न उदाहरण के रूप में एक सरणी का उपयोग कर सकते तदनुसार सूची।