में असीमित फ़ाइल अपलोड अपलोड करें जो मैं कर रहा हूं। मैं अपने स्प्रिंग वेब ऐप में अजाक्स के माध्यम से मल्टीपार्ट फ़ाइल अपलोड करना चाहता हूं। जब सर्वर POST अनुरोध प्राप्त करता है, तो यह डेटाबेस में एक टिकट संख्या बनाता है। यह तब एक धागा शुरू करता है जो वास्तविक फ़ाइल अपलोड को संभालता है। सर्वर फिर टिकट नंबर देता है।वसंत
मैं अनुरोध को संभालने के लिए CommonsMultipartResolver का उपयोग कर रहा हूं और मैंने संकल्प को स्पष्ट रूप से ध्वजांकित किया है ताकि मल्टीपार्ट को तुरंत हल नहीं किया जा सके।
तो यहाँ मैं क्या
@Controller
public class myController{
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
@ResponseBody
public String upload(MultipartHttpServletRequest request, String fileName){
String ticket = dao.createUploadTicket(fileName);
Runnable run = new Runnable(){
@Override
public void run(){
dao.writeUpdate(ticket, "Getting data from request");
final MultipartFile file = request.getFile("theFile");
dao.writeUpdate(ticket, "Multipart file processed");
try {
dao.writeUpdate(ticket, "Saving file to disk");
file.transferTo(new File("/myDirectory"));
dao.writeUpdate(ticket, "File saved to disk");
}
catch(Exception e){
dao.writeUpdate(ticket, "File upload failed with the exception " + e.toString());
}
}
};
Thread t = new Thread(run);
t.start();
return ticket;
}
}
है की तर्ज पर कुछ तो यहां मुद्दा यह है कि टिकट नंबर प्रगति अद्यतन प्राप्त करने के लिए किया जा सकता है। कहें कि एक बड़ी फाइल अपलोड की जा रही है। जिस ग्राहक ने फ़ाइल अपलोड पोस्ट किया है (इस उदाहरण में एक अजाक्स अनुरोध कहें) इसे अतुल्यकालिक रूप से कर सकता है और टिकट नंबर वापस ले सकता है। क्लाइंट उस टिकट नंबर का उपयोग फ़ाइल अपलोड करने के चरण को निर्धारित करने और किसी अन्य पृष्ठ में जानकारी प्रदर्शित करने के लिए कर सकता है।
एक अन्य इस्तेमाल होता है मुझे लगता है कि सभी टिकट नंबर के लिए सर्वर के लिए अनुरोध करता है एक HTML पृष्ठ हो सकता है, तो सभी फ़ाइल अपलोड कि सर्वर पर काम चल रहा है की एक "लाइव" दृश्य दिखाता है।
मैं इसे काम करने में सक्षम नहीं हूं क्योंकि जैसे ही नियंत्रक लौटाता है, वसंत CommonsMultipartResolver में cleanupMultipart() को कॉल करता है। चूंकि संकल्प Lazily ध्वज गलत पर सेट है, जब cleanupMultipart() कहा जाता है, यह multipart फ़ाइलों को हल करने और शुरू करने के लिए शुरू हो जाएगा। इससे "request.getFile (" theFile ") पर कॉल के बीच दौड़ की स्थिति होती है;" रननेबल और क्लीनअप में मल्टीपार्ट() कॉल अंततः एक अपवाद का कारण बनता है।
किसी के पास कोई विचार है? क्या मैं बैक-एंड एसिंक्रोनस फ़ाइल हैंडलिंग करने के लिए यहां कुछ प्रकार के HTTP अनुबंध को तोड़ रहा हूं।
Commention। मुझे निम्नलिखित ब्लॉग मिले जो समाधान के साथ आने में मदद कर सकते हैं। http://blog.springsource.org/2012/05/06/spring-mvc-3-2-preview-introducing-servlet-3-async-support/ https://blogs.oracle.com/ enterprisetechtips/entry/asynchronous_support_in_servlet_3 यदि मैं एक कामकाजी उदाहरण के साथ आता हूं तो मैं वापस पोस्ट करूंगा। – CAL5101