2012-11-20 8 views
8

हमारे ग्राहक पर, बड़ी फ़ाइलों को अपलोड करना संभव है। हम अनुरोधों के आकार को कम करने के लिए चंकिंग का उपयोग करना चाहते हैं। हम Plupload का उपयोग कर रहे हैं, इसलिए फ़ाइलों में फ़ाइलों को भेजना आसान है। हालांकि, मुझे यकीन नहीं है कि भाग को कैसे संभालें। हम सर्वर पर स्प्रिंग एमवीसी का उपयोग कर रहे हैं, और मेरे पास वर्तमान में मेरे नियंत्रक विधि के लिए निम्न है: uploadMedia(@RequestBody MultipartFile file) जहां MultipartFileorg.springframework.web.multipart.MultipartFile है। जब यह चंकिंग नहीं कर रहा है तो यह ठीक काम करता है। जब मैं क्लाइंट साइड पर चंकिंग चालू करता हूं, तब भी यह इस विधि में ठीक हो जाता है, लेकिन मुझे उस फ़ाइल पर कुछ भी दिखाई नहीं देता है जो उसमें पारित हो जाता है, यह पहचानता है कि खंड किस फाइल का हिस्सा है। उम्मीद है कि मैं बस कुछ याद कर रहा हूँ।सर्वर पर फ़ाइल अपलोड भाग को कैसे संभालें (प्लुपलोड/स्प्रिंग एमवीसी)?

ऐसा लगता है कि यह एक सामान्य वर्कफ़्लो है, लेकिन मुझे सर्वर पक्ष पर यह कैसे किया जाता है इसके बारे में कोई अच्छा उदाहरण नहीं दिख रहा है। बस वसंत के साथ एक समाधान बहुत अच्छा होगा, लेकिन अगर किसी अन्य पुस्तकालय की आवश्यकता है, तो यह भी ठीक है। मैंने कुछ Apache Commons FileUpload पर देखा, लेकिन मुझे वहां पर चंकने के बारे में कुछ भी नहीं मिला। इसके साथ कोई मदद महान होगा। धन्यवाद।

उत्तर

8

मैंने कुछ और के माध्यम से डीबग किया और मेरे नियंत्रक विधि में HttpServletRequest जोड़ा ताकि यह देखने के लिए कि वहां कुछ भी उपलब्ध है या नहीं। मैंने पाया कि मुझे प्राप्त अनुरोध org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest था जिसमें multipartParameters नामक एक फ़ील्ड है जो केवल HashMap है। मैंने पाया कि इस मानचित्र में name, chunks, और chunk की चाबियाँ थीं। (शून्य आधारित) क्रमश:

uploadMedia(@RequestBody MultipartFile file, @RequestParam String name, @RequestParam int chunks, @RequestParam int chunk) 

पर्याप्त बेशक, उन @RequestParam पैरामीटर फ़ाइल, मात्रा की संख्या, और खंड संख्या के नाम के साथ आबादी गया: तो, मैं अपने हस्ताक्षर के रूप में निम्नलिखित की कोशिश करने का फैसला किया। प्रत्येक अनुरोध के साथ इस जानकारी को रखने से अंतिम फ़ाइल में भाग इकट्ठा करना बहुत आसान हो जाएगा।

यह जानने के लिए एक बात यह भी है कि अगर फ़ाइल को खंडित करने की आवश्यकता नहीं है (फ़ाइल का आकार खंड आकार से कम है), chunks और chunk पैरामीटर नहीं भेजे गए हैं।

uploadMedia(@RequestBody MultipartFile file, @RequestParam String name, @RequestParam(required=false, defaultValue="-1") int chunks, @RequestParam(required=false, defaultValue="-1") int chunk) 

तो मैं जांच कर सकते हैं के लिए -1 अगर मैं बिल्कुल बेडौल के बारे में चिंता करने की जरूरत को देखने के लिए: तो, मेरा अंतिम हस्ताक्षर इस तरह देख समाप्त हो गया।

Media media = new Media(); 
//set stuff on my Media object for storing info about the file in the DB 
//.... 
if (chunks > 0 && chunk > 0) 
{ 
    //Need to append the bytes in this chunk 
    mediaRepository.appendBytes(media, file.getBytes()); 
    if (chunk == chunks - 1) 
    { 
     //last chunk, upload is done 
     onUploadFinished(media); 
    } 
} 
else 
{ 
    //Write out the first set of bytes 
    mediaRepository.saveBytes(media, file.getBytes()); 
    if (chunks <= 0) 
    { 
     //no chunks were needed, all the bytes have been written out, upload is done 
     onUploadFinished(media); 
    } 
} 
+0

यह संभव है नियंत्रक के अधिक देखने के लिए:

तो, नियंत्रक विधि अपने आप में मैं कुछ इस तरह है? मैं एक ही कार्यक्षमता को लागू करने की कोशिश कर रहा हूं और शेष नियंत्रक से जूझ रहा हूं। – zmanc

+0

मैंने नियंत्रक कोड के अधिक शामिल करने के लिए उत्तर अपडेट किया है। – dnc253

+0

यदि आपको कोई फर्क नहीं पड़ता है तो क्या आप अपने मीडिया रिपोजिटरी का एक हिस्सा साझा कर सकते हैं? – zmanc

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