2016-02-02 7 views
9

मैं एक साथ कई फ़ाइलों को अपलोड करने के लिए निम्नलिखित नियंत्रक विधि, जवाब के साथ-साथ this question को this blog post से प्रेरित है और:खाली सूची <MultipartFile> जब एनजी-फ़ाइल-अपलोड के साथ वसंत में कई फ़ाइलों को अपलोड करने की कोशिश कर

@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) 
@PreAuthorize(...) 
public void upload(@PathVariable User user, 
        @RequestParam("file") List<MultipartFile> files) { 
    // handle files 
} 

हालांकि, फ़ाइलों की सूची हमेशा खाली होती है हालांकि अनुरोध में उन्हें शामिल किया जाता है।

अगर मैं विधि के लिए तीसरे MultipartRequest पैरामीटर जोड़ें:

public void upload(@PathVariable User user, 
        @RequestParam("file") List<MultipartFile> files, 
        MultipartRequest request) 

मैं देख सकता हूँ इसे सही ढंग से अपनी अपलोड की गई फ़ाइलें हैं:

request contents

क्या हो सकता है खाली List<MultipartFile> का कारण?

मैं फ़ाइलों को सबमिट करने के लिए ng-file-upload का उपयोग कर रहा हूं, लेकिन मुझे नहीं लगता कि यह इस मुद्दे से जुड़ा हुआ है। वसंत 4.2.4।

@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) 
    @PreAuthorize(...) 
    public void upload(@PathVariable User user,@ModelAttribute("uploadFile") FileUpload uploadFile) throws IllegalStateException, IOException { 

    List<MultipartFile> files = uploadFile.getFiles(); 
    ... 

और एक वर्ग की तरह बनाने के लिए:: @ModelAttribute इस तरह का उपयोग करने के

+0

आपकी कॉन्फ़िगरेशन? मल्टीपार्ट अपलोड के लिए आपको एक लाइब्रेरी और मिलान करने वाला रिज़ॉल्यूवर चाहिए। – zeroflagL

+0

क्या * लाइब्रेरी *? – fracz

+0

मुझे लगता है कि आपने उस ब्लॉग पोस्ट को पढ़ा है जिसका आप उल्लेख कर रहे थे। 'commons-fileupload' उदा। – zeroflagL

उत्तर

14

समस्या यह है कि ng-file-upload डिफ़ॉल्ट रूप से नाम file[0], file[1] आदि का उपयोग करके फ़ाइलें की सरणी प्रस्तुत यह arrayKey मूल्य के साथ विन्यास योग्य है जब Upload सेवा का उपयोग किया गया था। इसे खाली स्ट्रिंग पर सेट करने से फ़ाइलों को उसी file कुंजी के अंतर्गत भेजा जा सकता है, जिसे स्प्रिंग के साथ सही ढंग से हल किया गया है और @RequestParam("file") List<MultipartFile> में सबमिट की गई सभी फ़ाइलें शामिल हैं।

Upload.upload({url: url, data: {file: arrayOfFiles}, arrayKey: ''}) 
3

कोशिश

 public class FileUpload { 
    private List<MultipartFile> files; 
    public List<MultipartFile> getFiles() { 
     return files; 
    } 

    public void setFiles(List<MultipartFile> files) { 
     this.files= files; 
     } 
    } 
+0

लेकिन मैं एक साथ कई फाइलें अपलोड करना चाहता हूं। – fracz

+0

@fracz अद्यतन उत्तर – Abdelhak

0

मुझे लगता है कि जिस तरह से आप सामने से डेटा भेजा, यह बाध्य नहीं सकते हैं के साथ java.util.List। आप अनुरोध के रूप में एक JSON डेटा बना सकते हैं और आप @RequestBody तरह के साथ अपने सूची टिप्पणी किए गए हैं:

@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST) 
@PreAuthorize(...) 
public void upload(@PathVariable User user, 
        @RequestBody List<MultipartFile> files) { 
    // handle files 
} 

इस काम करना चाहिए। कुछ जानकारी here

+0

मेरे लिए बाहर काम नहीं किया था, लेकिन मैं दृष्टिकोण पसंद करता हूं। ऊपर @francz विधि का उपयोग कर समाप्त हो गया। – Spider

+0

आपके द्वारा @RequestBody के साथ प्रस्तावित समाधान वास्तव में सही है, जब अनुरोध के निकाय के पास बैकएंड पर आपके डोमेन ऑब्जेक्ट में प्रत्यक्ष अनुवाद होता है। उदाहरण के लिए, इसका उपयोग शरीर को जेएसओएन डेटा से ऑब्जेक्ट में पार्स करने के लिए किया जा सकता है। हालांकि, यह मल्टीपार्टफाइल के साथ काम नहीं करेगा। –

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