दिलचस्प पोस्ट
जब तक कि सभी थ्रेड्स जावा में अपना काम समाप्त न करें तब तक प्रतीक्षा करें एक सरणी में व्युत्क्रम की गिनती एक्लिप्स डीबगर में वापस कैसे कदम उठाएं? क्रोम एक्सटेंशन में क्रॉस-उत्पत्ति XMLHttpRequest क्रोम कास्ट प्रेषक "सत्र_अंदर" NOT_FOUND एलेप्से के लिए ब्लैकबेरी जेडीई प्लगइन में प्रीप्रोसेसर निर्देश का उपयोग करना? Unique_ptr के साथ एक क्लास के लिए कन्वर्टर कॉपी करें VBA.NET के समान तरीके से VBA में कक्षा ऑब्जेक्ट मॉड्यूल के बीच तुलना विधियों का उपयोग कैसे करें? मैं मार्कडाउन में एक HTML वर्ग विशेषता कैसे सेट करूं? सांबा जेसीआईएफएस के साथ जावा का उपयोग करने की सुविधा मुझे सुपर को कब कॉल करना चाहिए? मैं .gitconfig में खुद के लिए एकाधिक उपयोगकर्ताओं को निर्दिष्ट कर सकता हूँ? पृष्ठ स्क्रॉल किए जाने के बाद jQuery के ड्रैगएबल गलत जगह में सहायक दिखाता है आईओएस 5 पर फास्ट एंड एक्स्टीर कोर डेटा आयात को लागू करना सरणी / एरे सूची पर एक लिंक की गई सूची का उपयोग कब करना है?

JSP / Servlet का उपयोग करके सर्वर पर फाइल कैसे अपलोड करें?

JSP / Servlet का उपयोग कर मैं सर्वर पर फाइल कैसे अपलोड कर सकता हूँ? मैंने यह कोशिश की:

<form action="upload" method="post"> <input type="text" name="description" /> <input type="file" name="file" /> <input type="submit" /> </form> 

हालांकि, मुझे केवल फ़ाइल का नाम मिलता है, न कि फाइल सामग्री। जब मैं <form> enctype="multipart/form-data" जोड़ता हूं, तो request.getParameter() null रिटर्न करता है।

अनुसंधान के दौरान मैं अपाचे सामान्य फ़ाइल अपलोड पर ठोकर खाई। मैंने यह कोशिश की:

 FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); // This line is where it died. 

दुर्भाग्य से, सर्वलेट ने स्पष्ट संदेश और कारण के बिना एक अपवाद फेंक दिया यहां स्टैकट्र्रेस है:

 SEVERE: Servlet.service() for servlet UploadServlet threw exception javax.servlet.ServletException: Servlet execution threw an exception at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:637) 

Solutions Collecting From Web of "JSP / Servlet का उपयोग करके सर्वर पर फाइल कैसे अपलोड करें?"

परिचय

ब्राउज़ करने और अपलोड करने के लिए एक फ़ाइल का चयन करने के लिए आपको फ़ॉर्म में HTML <input type="file"> फ़ील्ड की आवश्यकता है जैसा कि HTML विनिर्देश में कहा गया है कि आपको POST विधि का उपयोग करना होगा और फ़ॉर्म के enctype विशेषता को "multipart/form-data" सेट "multipart/form-data"

 <form action="upload" method="post" enctype="multipart/form-data"> <input type="text" name="description" /> <input type="file" name="file" /> <input type="submit" /> </form> 

इस तरह के फॉर्म को सबमिट करने के बाद, बाइनरी मल्टीपार्ट फॉर्म डेटा अनुरोध शरीर में एक अलग प्रारूप में उपलब्ध है, जब तक कि enctype सेट नहीं है।

सर्विसलेट 3.0 से पहले, सर्लेट एपीआई ने मूल रूप से multipart/form-data समर्थन नहीं किया था यह केवल application/x-www-form-urlencoded के डिफ़ॉल्ट फ़ॉर्म एन्क्रिप्शन का समर्थन करता है application/x-www-form-urlencoded । मल्टीपार्ट फॉर्म डेटा का उपयोग करते समय request.getParameter() और कंसोर्ट्स सभी null वापसी करेंगे। यह वह जगह है जहां प्रसिद्ध Apache कॉमन्स FileUpload तस्वीर में आया था।

इसे मैन्युअल रूप से पार्स नहीं करें!

आप सिद्धांत में अनुरोध निकाय को स्वयं को ServletRequest#getInputStream() पर आधारित पार्स कर सकते हैं। हालांकि, यह एक सटीक और कठिन काम है जिसके लिए आरएफसी 2388 का सटीक ज्ञान आवश्यक है आपको इसे स्वयं पर करने का प्रयास नहीं करना चाहिए या इंटरनेट पर कहीं और पाया गया कुछ घर-आधारित लाइब्रेरी-कम कोड कॉपी करना चाहिए। इसमें कई ऑनलाइन स्रोतों में असफल रहे हैं, जैसे कि गुलाबआइंडियानेट। पीडीएफ फाइल अपलोड भी देखें। आपको एक वास्तविक लाइब्रेरी का उपयोग करना चाहिए जिसका उपयोग लाखों प्रयोक्ताओं द्वारा वर्षों तक किया जाता है (और निहित परीक्षण!)। इस तरह की एक पुस्तकालय ने इसकी मजबूरी साबित कर दी है

जब आप पहले ही Servlet 3.0 या नए पर हैं, तो देशी API का उपयोग करें

यदि आप कम से कम सर्विसलेट 3.0 (टोमैक 7, जेटी 9, जेबीस एएस 6, ग्लासफ़िश 3, इत्यादि) का प्रयोग कर रहे हैं, तो आप बस मानक एपीआई का उपयोग कर सकते हैं, जो HttpServletRequest#getPart() व्यक्तिगत मल्टीपार्ट फॉर्म डेटा आइटम्स को इकट्ठा करने के लिए 3.0 कार्यान्वयन वास्तव में इसके लिए कवर के तहत अपाचे कॉमन्स फाइल अपलोड करें!)। इसके अलावा, सामान्य फॉर्म फ़ील्ड्स getParameter() सामान्य तरीके से उपलब्ध हैं।

पहले @MultipartConfig साथ अपने @MultipartConfig को एनोटेट करने के लिए इसे multipart/form-data अनुरोधों को पहचानने और समर्थन देने के लिए और इस तरह काम करने के लिए getPart() प्राप्त करें:

 @WebServlet("/upload") @MultipartConfig public class UploadServlet extends HttpServlet { // ... } 

उसके बाद, इसके doPost() को लागू करें:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String description = request.getParameter("description"); // Retrieves <input type="text" name="description"> Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file"> String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix. InputStream fileContent = filePart.getInputStream(); // ... (do your job here) } 

Path#getFileName() नोट करें यह फ़ाइल नाम प्राप्त करने के लिए एक MSIE फ़िक्स है यह ब्राउज़र केवल फ़ाइल नाम के बजाय नाम के साथ पूर्ण फ़ाइल पथ भेजता है।

मल्टी-फाइल अपलोड के लिए आपके पास <input type="file" name="file" multiple="true" /> , तो उन्हें नीचे के रूप में जमा करें (दुर्भाग्य से request.getParts("file") रूप में ऐसी कोई विधि नहीं है, जो कि request.getParts("file") ):

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... List<Part> fileParts = request.getParts().stream().filter(part -> "file".equals(part.getName())).collect(Collectors.toList()); // Retrieves <input type="file" name="file" multiple="true"> for (Part filePart : fileParts) { String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); // MSIE fix. InputStream fileContent = filePart.getInputStream(); // ... (do your job here) } } 

जब आप सर्वलेट 3.1 पर नहीं हैं, तो मैन्युअल रूप से फाइल नाम सबमिट करें

नोट करें कि Part#getSubmittedFileName() को सर्वलेट 3.1 (टोमैक 8, जेटटी 9, वाईल्डफ़ी 8, ग्लासफ़िश 4, आदि) में पेश किया गया था। यदि आप सर्वलेट 3.1 पर नहीं हैं, तो आपको प्रस्तुत फ़ाइल नाम प्राप्त करने के लिए एक अतिरिक्त उपयोगिता विधि की आवश्यकता होगी।

 private static String getSubmittedFileName(Part part) { for (String cd : part.getHeader("content-disposition").split(";")) { if (cd.trim().startsWith("filename")) { String fileName = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", ""); return fileName.substring(fileName.lastIndexOf('/') + 1).substring(fileName.lastIndexOf('\\') + 1); // MSIE fix. } } return null; } 
 String fileName = getSubmittedFileName(filePart); 

नोट फ़ाइल नाम प्राप्त करने के लिए MSIE को ठीक करें। यह ब्राउज़र केवल फ़ाइल नाम के बजाय नाम के साथ पूर्ण फ़ाइल पथ भेजता है।

जब आप सर्लेट 3.0 पर नहीं हैं, तो अपाचे कॉमन्स फाइल अपलोड करें

यदि आप अभी भी सर्लेट 3.0 पर नहीं हैं (यह अपग्रेड के समय के बारे में नहीं है?), आम प्रथा मल्टीपार्ट फॉर्म डेटा अनुरोधों को पार्स करने के लिए अपाचे कॉमन्स फाइलअपलोड का उपयोग करना है। इसमें उत्कृष्ट उपयोगकर्ता गाइड और अकसर किये गए सवाल हैं (ध्यान से दोनों के माध्यम से जाना) ओ रेली (" कॉस ") MultipartRequest , लेकिन इसमें कुछ (छोटी) कीड़े हैं और अब इसे वर्षों से सक्रिय रूप से बनाए नहीं रखा गया है। मैं इसे इस्तेमाल करने की अनुशंसा नहीं करता। अपाचे कॉमन्स फाइलअपलोड अभी भी सक्रिय रूप से बनाए रखा गया है और वर्तमान में बहुत ही परिपक्व है।

अपाचे कॉमन्स फाइल अपलोड का उपयोग करने के लिए, आपको अपने वेबएप /WEB-INF/lib में कम से कम निम्न फाइलें होनी चाहिए:

  • commons-fileupload.jar
  • commons-io.jar

आपका प्रारंभिक प्रयास असफल रहा क्योंकि आप कॉमन्स आईओ को भूल गए

यहां एक किकॉफ़ उदाहरण दिया गया है कि अपाचे कॉमन्स UploadServlet का उपयोग करते समय आपके UploadServlet का doPost() कैसे UploadServlet सकता है:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { // Process regular form field (input type="text|radio|checkbox|etc", select, etc). String fieldName = item.getFieldName(); String fieldValue = item.getString(); // ... (do your job here) } else { // Process form file field (input type="file"). String fieldName = item.getFieldName(); String fileName = FilenameUtils.getName(item.getName()); InputStream fileContent = item.getInputStream(); // ... (do your job here) } } } catch (FileUploadException e) { throw new ServletException("Cannot parse multipart request.", e); } // ... } 

यह बहुत महत्वपूर्ण है कि आप getParameter() कॉल न करें, getParameterMap() , getParameterValues() , getInputStream() , getReader() आदि प्राप्त करें। अन्यथा सर्वलेट कंटेनर अनुरोध शरीर को पढ़ और पार्स करेगा और इस प्रकार अपाचे कॉमन्स फाइल अपलोड करने के लिए रिक्त अनुरोध बॉडी मिलेगी। एओ सर्विसलेटफाइल यूप्लोड # पार्स रिक्वाइस्ट (अनुरोध) भी खाली सूची में लौटाता है ।

नोट: FilenameUtils#getName() यह फ़ाइल नाम प्राप्त करने के लिए एक MSIE फ़िक्स है यह ब्राउज़र केवल फ़ाइल नाम के बजाय नाम के साथ पूर्ण फ़ाइल पथ भेजता है।

वैकल्पिक रूप से आप एक Filter में यह सब भी लपेट कर सकते हैं जो इसे स्वचालित रूप से पार्स करता है और अनुरोध के पैरामेटमैप में सामान को वापस रख देता है ताकि आप request.getParameter() का उपयोग जारी रख सकें और request.getAttribute() द्वारा अपलोड की गई फ़ाइल को पुनः प्राप्त कर सकें request.getAttribute() आप इस ब्लॉग लेख में एक उदाहरण पा सकते हैं ।

getParameter() GlassFish3 बग के लिए वैकल्पिक हल अभी भी null लौट रहा है

नोट करें कि ग्लासफ़िश संस्करण 3.1.2 से पुराने हैं, जिसमें एक बग था, जिसमें getParameter() अभी भी null । यदि आप ऐसे कंटेनर को लक्षित कर रहे हैं और इसे अपग्रेड नहीं कर सकते हैं, तो आपको इस उपयोगिता विधि की सहायता से getPart() से मूल्य निकालना होगा:

 private static String getValue(Part part) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(part.getInputStream(), "UTF-8")); StringBuilder value = new StringBuilder(); char[] buffer = new char[1024]; for (int length = 0; (length = reader.read(buffer)) > 0;) { value.append(buffer, 0, length); } return value.toString(); } 
 String description = getValue(request.getPart("description")); // Retrieves <input type="text" name="description"> 

अपलोड की गई फाइल सहेज रहा है ( getRealPath() उपयोग न करें और न ही part.write() !)

fileContent या डाटाबेस में प्राप्त fileContent (उपरोक्त कोड स्निपेट में दिखाए गए fileContent वैरिएबल) को ठीक से सहेजने के बारे में विस्तृत जानकारी के लिए निम्नलिखित उत्तरों पर fileContent :

  • सर्वलेट एप्लिकेशन में अपलोड की गई फ़ाइलों को सहेजने का अनुशंसित तरीका
  • कैसे एक छवि अपलोड करें और इसे डेटाबेस में सहेजें?
  • ब्लॉब के लिए पार्ट कन्वर्ट करने के लिए कैसे, तो मैं इसे MySQL में स्टोर कर सकते हैं?

अपलोड की गई फ़ाइल को सेवा देना

क्लाइंट से डिस्क या डाटाबेस से सहेजी गई फ़ाइल को ठीक से सेवा करने के बारे में विवरण के लिए निम्नलिखित उत्तरों पर जाएं:

  • <H: ग्राफिक इमेज> या <img> टैग का उपयोग करके वेबएप / वेबकोनटेक्स्ट / परिनियोजन फ़ोल्डर से बाहर चित्र लोड करें
  • जेएसपी पृष्ठ में एक डेटाबेस से छवियों को कैसे प्राप्त और प्रदर्शित करना है?
  • जावा वेब अनुप्रयोग में एप्लिकेशन सर्वर के बाहर से स्थिर डेटा सेवा करने का सबसे सरल तरीका
  • एचटीटीपी कैशिंग के लिए स्थिर संसाधन सर्वलेट का सार टेम्पलेट

फ़ॉर्म को अजाक्सिंग करना

नीचे दिए गए उत्तरों के लिए हेड करें कि कैसे अजाक्स (और jQuery) का उपयोग कर अपलोड करें। ध्यान दें कि फ़ॉर्म डेटा एकत्र करने के लिए सर्वलेट कोड को इसके लिए परिवर्तित करने की आवश्यकता नहीं है! केवल आप जिस तरीके से जवाब देते हैं, वह बदला जा सकता है, लेकिन यह मात्र तुच्छ है (यानी जेएसपी को अग्रेषित करने की बजाय, कुछ जेएसओएन या एक्सएमएल या सादे पाठ को भी मुद्रित करें जो कि अजाक्स कॉल के लिए जिम्मेदार लिपि की उम्मीद कर रहे हैं)।

  • JSP / Servlet और Ajax का उपयोग कर सर्वर पर फ़ाइलों को कैसे अपलोड करें?
  • xmlHttpRequest के माध्यम से एक फ़ाइल को बहुस्तृत के रूप में भेजना
  • जावा सबलेट पर एचटीएमएल 5 फाइल अपलोड करें

उम्मीद है कि यह सब मदद करता है 🙂

यदि आप स्प्रिंग एमवीसी का उपयोग करते हैं, तो यह है कि कैसे: (मैं इसे यहां छोड़ रहा हूं अगर कोई इसे उपयोगी खोजता है)।

" multipart/form-data " पर सेट enctype एट्रिब्यूट के साथ एक फ़ॉर्म का प्रयोग करें (बाल्सस के उत्तर के समान)

 <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="Upload"/> </form> 

अपने नियंत्रक में, MultipartFile प्रकार के लिए अनुरोध पैरामीटर file को निम्नानुसार रखें:

 @RequestMapping(value = "/upload", method = RequestMethod.POST) public void handleUpload(@RequestParam("file") MultipartFile file) throws IOException { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // alternatively, file.getInputStream(); // application logic } } 

आप getOriginalFilename() और getSize() का उपयोग करके फ़ाइल नाम और आकार प्राप्त कर सकते हैं।

मैंने स्प्रिंग संस्करण 4.1.1.RELEASE साथ इस का परीक्षण किया है। 4.1.1.RELEASE

आपको अपनी lib निर्देशिका में शामिल करने के लिए common-io.1.4.jar फ़ाइल की आवश्यकता है, या यदि आप किसी भी संपादक में काम कर रहे हैं, जैसे नेटबैन, तो आपको प्रोजेक्ट गुणों पर जाने की आवश्यकता है और बस JAR फ़ाइल जोड़ें और आप किया हुआ।

common.io.jar फ़ाइल को बस Google पर प्राप्त करें या बस अपाचे common.io.jar वेबसाइट पर जाएं जहां आपको इस फ़ाइल के मुफ्त डाउनलोड का विकल्प मिलता है। लेकिन एक बात याद रखें: यदि आप एक विंडोज़ उपयोगकर्ता हैं तो बाइनरी ज़िप फ़ाइल डाउनलोड करें

मैं हर एचटीएमएल प्रपत्र के लिए सामान्य सर्विस का प्रयोग कर रहा हूं कि क्या इसमें अटैचमेंट हैं या नहीं यह Servlet एक TreeMap रिटर्न करती है जहां की कुंजी jsp नाम पैरामीटर और मान उपयोगकर्ता इनपुट होते हैं और फिक्स्ड डायरेक्टरी में सभी अटैचमेंट्स को बचाता है और बाद में आप अपनी पसंद की निर्देशिका का नाम बदलते हैं। यहां कनेक्शन कनेक्शन ऑब्जेक्ट के साथ हमारा कस्टम इंटरफ़ेस है। मुझे लगता है यह आपकी मदद करेगा

 public class ServletCommonfunctions extends HttpServlet implements Connections { private static final long serialVersionUID = 1L; public ServletCommonfunctions() {} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {} public SortedMap<String, String> savefilesindirectory( HttpServletRequest request, HttpServletResponse response) throws IOException { // Map<String, String> key_values = Collections.synchronizedMap( new // TreeMap<String, String>()); SortedMap<String, String> key_values = new TreeMap<String, String>(); String dist = null, fact = null; PrintWriter out = response.getWriter(); File file; String filePath = "E:\\FSPATH1\\2KL06CS048\\"; System.out.println("Directory Created ????????????" + new File(filePath).mkdir()); int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024; // Verify the content type String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File(filePath)); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax(maxFileSize); try { // Parse the request to get file items. @SuppressWarnings("unchecked") List<FileItem> fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator<FileItem> i = fileItems.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); if (!fi.isFormField()) { // Get the uploaded file parameters String fileName = fi.getName(); // Write the file if (fileName.lastIndexOf("\\") >= 0) { file = new File(filePath + fileName.substring(fileName .lastIndexOf("\\"))); } else { file = new File(filePath + fileName.substring(fileName .lastIndexOf("\\") + 1)); } fi.write(file); } else { key_values.put(fi.getFieldName(), fi.getString()); } } } catch (Exception ex) { System.out.println(ex); } } return key_values; } } 

टोमकैट में घटक या बाह्य पुस्तकालय के बिना 6 ओ 7

Web.xml फ़ाइल में अपलोड को सक्षम करना:

http://joseluisbz.wordpress.com/2014/01/17/manually-installing-php-tomcat-and-httpd-lounge/#Enabling%20File%20 अपलोड्स

 <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <multipart-config> <max-file-size>3145728</max-file-size> <max-request-size>5242880</max-request-size> </multipart-config> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> 

जैसा आप देख सकते हैं :

  <multipart-config> <max-file-size>3145728</max-file-size> <max-request-size>5242880</max-request-size> </multipart-config> 

JSP का उपयोग कर फाइल अपलोड करना फ़ाइलें:

Html फ़ाइल में

 <form method="post" enctype="multipart/form-data" name="Form" > <input type="file" name="fFoto" id="fFoto" value="" /></td> <input type="file" name="fResumen" id="fResumen" value=""/> 

जेएसपी फ़ाइल या सर्विस में

  InputStream isFoto = request.getPart("fFoto").getInputStream(); InputStream isResu = request.getPart("fResumen").getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte buf[] = new byte[8192]; int qt = 0; while ((qt = isResu.read(buf)) != -1) { baos.write(buf, 0, qt); } String sResumen = baos.toString(); 

अपने कोड को सर्वलेट आवश्यकताओं के लिए संपादित करें, जैसे अधिकतम-फ़ाइल-आकार , अधिकतम-अनुरोध-आकार और अन्य विकल्प जिन्हें आप सेट कर सकते हैं …

इस समस्या का एक अन्य स्रोत तब होता है यदि आप अपने एम्बेडेड टोमक के साथ जीरोमियो का उपयोग कर रहे हैं। इस मामले में, कॉमन्स-ओओ और कॉमन्स-फाइल अपलोड के परीक्षण के कई पुनरावृत्त होने के बाद, समस्या जनसंपर्क-xxx जार से निपटने वाले अभिभावक क्लासलोडर से उत्पन्न होती है। इसे रोका जा सकता है। दुर्घटना हमेशा हुई:

 fileItems = uploader.parseRequest(request); 

ध्यान दें कि सूची के प्रकार की फाइलें कॉमन्स-फाइलअपलोड के वर्तमान संस्करण के साथ बदल दी गई हैं विशेष रूप से List<FileItem> रूप में पूर्व संस्करणों के विपरीत, जहां यह सामान्य List थी

मैंने वास्तविक त्रुटि का पता लगाने के लिए मेरे एक्लिप्स परियोजना में commons-fileupload और commons-IO के लिए स्रोत कोड जोड़ा और अंत में कुछ अंतर्दृष्टि मिली सबसे पहले, फेंक दिया जाने वाला अपवाद, थ्रॉएबल प्रकार की नहीं है, जो कि कहा गया है FileIOException या न ही अपवाद (ये फंस नहीं होगा)। दूसरा, त्रुटि संदेश में अस्पष्ट है जिसमें कहा गया है कि क्लास नहीं मिला क्योंकि axis2 को कमांडो-आईओ नहीं मिला। ऐक्सिस 2 का उपयोग मेरे प्रोजेक्ट में बिल्कुल भी नहीं किया गया है, लेकिन मानक इंस्टॉलेशन के भाग के रूप में Geronimo रिपॉजिटरी उपनिर्देशिका में एक फ़ोल्डर के रूप में मौजूद है।

अंत में, मुझे 1 जगह मिल गई, जिसने एक कार्यशील समाधान पेश किया जो सफलतापूर्वक मेरी समस्या हल कर रहा था। तैनाती योजना में आपको मूल लोडर से जार छिपाएंगे। इसे नीचे दिखाए गए मेरी पूरी फ़ाइल के साथ geronimo-web.xml में डाल दिया गया था।

 Pasted from <http://osdir.com/ml/user-geronimo-apache/2011-03/msg00026.html> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <web:web-app xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0" xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0" xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2" xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2" xmlns:log="http://geronimo.apache.org/xml/ns/loginconfig-2.0" xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:pers="http://java.sun.com/xml/ns/persistence" xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1" xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0" xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1"> <dep:environment> <dep:moduleId> <dep:groupId>DataStar</dep:groupId> <dep:artifactId>DataStar</dep:artifactId> <dep:version>1.0</dep:version> <dep:type>car</dep:type> </dep:moduleId> <!--Don't load commons-io or fileupload from parent classloaders--> <dep:hidden-classes> <dep:filter>org.apache.commons.io</dep:filter> <dep:filter>org.apache.commons.fileupload</dep:filter> </dep:hidden-classes> <dep:inverse-classloading/> </dep:environment> <web:context-root>/DataStar</web:context-root> </web:web-app> 

स्प्रिंग एमवीसी के लिए मैं यह करने के लिए घंटों की कोशिश कर रहा हूं और एक सरल संस्करण हासिल करने में कामयाब रहा है जो डेटा इनपुट और डेटा दोनों में लेने के लिए काम किया है।

 <form action="/handleform" method="post" enctype="multipart/form-data"> <input type="text" name="name" /> <input type="text" name="age" /> <input type="file" name="file" /> <input type="submit" /> </form> 

नियंत्रक को संभालना

 @Controller public class FormController { @RequestMapping(value="/handleform",method= RequestMethod.POST) ModelAndView register(@RequestParam String name, @RequestParam int age, @RequestParam MultipartFile file) throws ServletException, IOException { System.out.println(name); System.out.println(age); if(!file.isEmpty()){ byte[] bytes = file.getBytes(); String filename = file.getOriginalFilename(); BufferedOutputStream stream =new BufferedOutputStream(new FileOutputStream(new File("D:/" + filename))); stream.write(bytes); stream.flush(); stream.close(); } return new ModelAndView("index"); } } 

आशा करता हूँ की ये काम करेगा 🙂

यहां अपाचे कॉमन्स फ़ाइल अपलोड करने का एक उदाहरण है:

 // apache commons-fileupload to handle file upload DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File(DataSources.TORRENTS_DIR())); ServletFileUpload fileUpload = new ServletFileUpload(factory); List<FileItem> items = fileUpload.parseRequest(req.raw()); FileItem item = items.stream() .filter(e -> "the_upload_name".equals(e.getFieldName())) .findFirst().get(); String fileName = item.getName(); item.write(new File(dir, fileName)); log.info(fileName); 

आप jsp / servlet का उपयोग कर फ़ाइल अपलोड कर सकते हैं

 <form action="UploadFileServlet" method="post"> <input type="text" name="description" /> <input type="file" name="file" /> <input type="submit" /> </form> 

दूसरी ओर सर्वर साइड पर निम्न कोड का उपयोग करें

  package com.abc..servlet; import java.io.File; --------- -------- /** * Servlet implementation class UploadFileServlet */ public class UploadFileServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UploadFileServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.sendRedirect("../jsp/ErrorPage.jsp"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); HttpSession httpSession = request.getSession(); String filePathUpload = (String) httpSession.getAttribute("path")!=null ? httpSession.getAttribute("path").toString() : "" ; String path1 = filePathUpload; String filename = null; File path = null; FileItem item=null; boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); String FieldName = ""; try { List items = upload.parseRequest(request); Iterator iterator = items.iterator(); while (iterator.hasNext()) { item = (FileItem) iterator.next(); if (fieldname.equals("description")) { description = item.getString(); } } if (!item.isFormField()) { filename = item.getName(); path = new File(path1 + File.separator); if (!path.exists()) { boolean status = path.mkdirs(); } /* START OF CODE FRO PRIVILEDGE*/ File uploadedFile = new File(path + Filename); // for copy file item.write(uploadedFile); } } else { f1 = item.getName(); } } // END OF WHILE response.sendRedirect("welcome.jsp"); } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } } 
 DiskFileUpload upload=new DiskFileUpload(); 

इस ऑब्जेक्ट से आपको फ़ाइल आइटम और फ़ील्ड मिलनी है, फिर यू सर्वर में स्टोर कर सकता है जैसे कि बाद में

  String loc="./webapps/prjct name/server folder/"+contentid+extension; File uploadFile=new File(loc); item.write(uploadFile); 

फ़ाइल के लिए एकाधिक फाइल भेजने के लिए हमें enctype="multipart/form-data"
और इनपुट टैग में एकाधिक फ़ाइल उपयोग multiple="multiple" भेजने के लिए

 <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="fileattachments" multiple="multiple"/> <input type="submit" /> </form> 

HTML पृष्ठ

 <html> <head> <title>File Uploading Form</title> </head> <body> <h3>File Upload:</h3> Select a file to upload: <br /> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html> 

सेवा फ़ाइल

 // Import required java libraries import java.io.*; import java.util.*; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.output.*; public class UploadServlet extends HttpServlet { private boolean isMultipart; private String filePath; private int maxFileSize = 50 * 1024; private int maxMemSize = 4 * 1024; private File file ; public void init( ){ // Get the file location where it would be stored. filePath = getServletContext().getInitParameter("file-upload"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { // Check that we have a file upload request isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); return; } DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File("c:\\temp")); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. List fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Get the uploaded file parameters String fieldName = fi.getFieldName(); String fileName = fi.getName(); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); // Write the file if( fileName.lastIndexOf("\\") >= 0 ){ file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ; }else{ file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ; } fi.write( file ) ; out.println("Uploaded Filename: " + fileName + "<br>"); } } out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required."); } } 

web.xml

सबलेट अपलोड सर्कल के ऊपर संकलित करें और वेब.एक्सएमएल फाइल में आवश्यक एंट्री बनाएं।

 <servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping>