2012-08-30 8 views
5

। मुझे एक फ़ाइल और उससे जुड़े कुछ पैरामीटर भेजना है।

इस कोड के साथ serverside

try { 

     ServletFileUpload upload = new ServletFileUpload(); 

     FileItemIterator iterator = upload.getItemIterator(request); 

     while (iterator.hasNext()) { 
      FileItemStream item = iterator.next(); 


      if (item.isFormField()) { 

       String fieldName=item.getFieldName(); 
       String fieldValue = Streams.asString(item.openStream()); 
       System.out.println(" chk " +fieldName +" = "+ fieldValue); 
      } else { 
       stream = item.openStream(); 
       fileName = item.getName(); 
       mimetype = item.getContentType(); 
       int c; 
       while ((c = stream.read()) != -1) { 
        System.out.print((char) c); 
        } 
      } 
     } 
    }catch (Exception e) { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 
    System.out.println("out of try"); 
    ByteArrayOutputStream output = new ByteArrayOutputStream(); 
    int nRead; 
    while ((nRead = stream.read(buffer, 0, buffer.length)) != -1) { 
     System.out.println("lenth111" +nRead); 
     output.write(buffer, 0, nRead); 
    } 
    System.out.println("lenth" +nRead); 
    output.flush(); 

पर

मैं धारा पढ़ सकते हैं। और भी सांत्वना "कोशिश से बाहर" पर भी

और अंत में while ((nRead = stream.read(buffer, 0, buffer.length)) != -1) लाइन पर मैं एक चेतावनी

चेतावनी मिल गया छपा है:/UploadFileServlet: org.apache.commons.fileupload.FileItemStream $ ItemSkippedException।

इस समस्या को हल करने के लिए कैसे करें ??

+0

हाय GameBuilder और थॉमस Broyer, तो आप उस पर एक समाधान मिला? क्योंकि मुझे दिनों के लिए एक ही समस्या मिल रही है। कृपया, क्या कोई हमारी मदद कर सकता है? धन्यवाद – Aerox

+0

अरे, मैं भी वही ढूंढ रहा हूं। क्या आपको कोई समाधान मिला? –

उत्तर

4

थोड़ा देर हो चुकी है लेकिन मुझे एक ही समस्या थी।

क्यों आपको लगता है कि अपवाद: ItemSkippedException की Javadocs एक छोटा सा समझाने:

यह अपवाद फेंक दिया जाता है, एक प्रयास InputStream, जो FileItemStream.openStream से लौटा दिया गया है से डेटा (पढ़ने के लिए किया जाता है), Iterator.hasNext() को इटरेटर पर लागू किया गया है, जिसने FileItemStream बनाया है।

आप जबकि पाश क्योंकि एक और यात्रा कहा जाता है (स्किप) फ़ाइल InputStream आप से पढ़ने की कोशिश बंद कर देता है जो समस्या का कारण बनता है बाहर InputStream धारा उपयोग कर रहे हैं।

समाधान: जबकि लूप के अंदर इनपुटस्ट्रीम का उपयोग करें। यदि आपको फ़ाइल को संसाधित करने से पहले सभी फॉर्म-फ़ील्ड की आवश्यकता है, तो सुनिश्चित करें कि आप इसे क्लाइंट साइड पर सही क्रम में सेट करें। पहले सभी फ़ील्ड, फाइल को आखिरी करें। उदाहरण जावास्क्रिप्ट FormData का उपयोग कर के लिए:

var fd = new window.FormData(); 

fd.append("param1", param1); 
fd.append("param2", param2); 

// file must be last parameter to append 
fd.append("file", file); 

और सर्वर साइड पर:

FileItemIterator iter = upload.getItemIterator(request); 
while (iter.hasNext()) { 
    FileItemStream item = iter.next(); 
    InputStream stream = item.openStream(); 

    // the order of items is given by client, first form-fields, last file stream 
    if (item.isFormField()) { 
     String name = item.getFieldName(); 
     String value = Streams.asString(stream); 
     // here we get the param1 and param2 
    } else { 
     String filename = item.getName(); 
     String mimetype = item.getContentType(); 

     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     int nRead; 
     while ((nRead = stream.read(buffer, 0, buffer.length)) != -1) { 
      System.out.println("lenth111" +nRead); 
      output.write(buffer, 0, nRead); 
     } 
     System.out.println("lenth" +nRead); 
     output.flush(); 
    } 
} 
+0

सही, मेरी इच्छा है कि इसे इटरेटर लूप के बाहर ले जाना संभव हो। –

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