2011-10-10 78 views
0

由於我是j2me的新手,我正嘗試在j2me上從手機上傳圖片,它在服務器端顯示異常。如何通過multipart/form-data將圖像上傳到j2me服務器?

org.apache.commons.fileupload.FileUploadException: Processing of ``multipart/form- 
    data request failed. Stream ended unexpectedly 
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadB 
    ase.java:384) 
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(
    ServletFileUpload.java:116) 
     at org.apache.jsp.photo_jsp._jspService(photo_jsp.java:119) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper 
     .java:384) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3 
     20) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter 
     (ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter 
     (ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke 
     (StandardWrapperValve.java:228) 
     at org.apache.catalina.core.StandardContextValve.invoke 
     (StandardContextValve.java:175) 
     at org.apache.catalina.core.StandardHostValve.invoke 
     (StandardHostValve.java:128) 
     at org.apache.catalina.valves.ErrorReportValve.invoke 
     (ErrorReportValve.java:104) 
     at org.apache.catalina.core.StandardEngineValve.invoke 
     (StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service 
     (CoyoteAdapter.java:216) 
     at org.apache.coyote.http11.Http11Processor.process 
     (Http11Processor.java:844) 
     at org.apache.coyote.http11.Http11Protocol 
     $Http11ConnectionHandler.process(Http11Protocol.java:634) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run 
     (JIoEndpoint.java:445) 
     at java.lang.Thread.run(Unknown Source) 

請告訴我如何解決。

從J2me我使用的代碼上傳圖像到服務器是。

HttpConnection conn = null; 
    OutputStream os = null; 
    // InputStream is = null; 

    try 
    { 
     System.out.println("url:" + serverurl); 
     conn = (HttpConnection)Connector.open(serverurl); 
     conn.setRequestMethod(HttpConnection.POST); 

     // String postData = ""; 

     InputStream imgIs = getClass().getResourceAsStream(FILE); 
     byte []imgData = new byte[imgIs.available()]; 
     imgIs.read(imgData); 

     conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=---------------------------4664151417711"); 

     os = conn.openOutputStream(); 
     // os.write(message1.getBytes()); 
    // For First Image uploading 

    String message1 = ""; 
     message1 += "-----------------------------4664151417711" + CrLf; 
    message1 += "Content-Disposition: form-data; name=\"photo\"; 
        filename=\"" + FILE + "\"" + CrLf; 
    message1 += "Content-Type: image/jpeg" + CrLf; message1 += CrLf; 

      os.write(message1.getBytes()); 


     // SEND THE IMAGE 
     int index = 0; 
     int size = 1024; 
     do{ 
      System.out.println("write:" + index); 
      if((index+size)>imgData.length){ 
       size = imgData.length - index; 
      } 
      os.write(imgData, index, size); 
      index+=size; 
      progress(imgData.length, index); // update the progress bar. 

     }while(index<imgData.length); 

     System.out.println("DONE"); 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    }finally 
    { 
     System.out.println("Close connection"); 
     try 
     { 
      //os.close(); 
     } 
     catch(Exception e){} 
     try 
     { 
      // is.close(); 
     } 
     catch(Exception e){} 
     try 
     { 
      // conn.close();    
     } 
     catch(Exception e){} 
    } 

on serside we use the code: 
    System.out.println(".............Images..122223...Images..."); 
FileItemFactory factory = new DiskFileItemFactory(); 
ServletFileUpload upload = new ServletFileUpload(factory); 
System.out.println(".............Images...11111..test..."+upload); 
boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    System.out.println(".............Images...11111..test..."+isMultipart); 

if(isMultipart) 
{ 
     System.out.println(".............Images...11111..Images..Images...."); 
     List items = upload.parseRequest(request); 
     System.out.println(".............Images.33333....Images..Images...."); 

      Iterator iterator = items.iterator(); 
      while(iterator.hasNext()) 
      { 
       String fieldName = ""; 
        String fieldValue=""; 
        String fileName = ""; 
        FileItem fileItem=(FileItem)iterator.next(); 
        System.out.println(fileItem.isFormField()); 
    if (fileItem.isFormField()) 
    { 
     fieldName = fileItem.getFieldName(); 
     fieldValue = fileItem.getString("UTF-8").trim(); 

     if(fieldName.equals("photo")) 
     { 
      if(fieldValue!=null && fieldValue!="") 
      { 
        photo = fieldValue; 
        System.out.println(photo); 
      } 
     } 
    }   
    else 

    try 
    { 
     if(fileItem != null) 
     { 
      fileName = applicationNumber+"_"+fileItem.getName(); 
      fieldName = fileItem.getFieldName(); 
      System.out.println("applicationNumber="+fileName); 
     } 
     if(fieldName.equals("photo")) 
     {  
      String x=fileName; 
      if(x.indexOf("/")!=-1) 
      { 
       uploadStr = x.substring(0,x.lastIndexOf("/")); 
       UploadFile = x.substring(x.lastIndexOf("/")+1,x.length()); 
      } 
      long sizeInBytes = fileItem.getSize(); 
      String applicationURL = "C:/Program Files/ 
       Apache Software Foundation/Tomcat 6.0/webapps/apply_smart/applications"; 
    StringTokenizer stringTokenizer = new StringTokenizer(UploadFile,"\\"); 
       int count=stringTokenizer.countTokens(); 
       for(int i=1;i<=count;i++) 
       { 
          String token=stringTokenizer.nextToken(); 
          if(i==count) 
          { 
           audioFileName=token; 
          } 
        } 
        applicationURL = applicationURL; 
        System.out.println("Path="+applicationURL); 
        String[] filePath = fileName.split("/"); 
    uploadedFile = new File(applicationURL+"/"+filePath[filePath.length - 1]); 
        long size=uploadedFile.length(); 
        if(size>=11264) 
        { 
         } 
            try 
            { 
         fileItem.write(uploadedFile); 
         path = applicationURL.replaceAll 
    ("C:/ProgramFiles/ApacheSoftwareFoundation /Tomcat 6.0/ webapps/apply_smart/", ""); 
        path= path + "/"+ filePath[filePath.length - 1]; 
         System.out.println("path::::::"+path);     
       } 
       catch (java.lang.Exception e) 
       { 
        out.println(e); 
       } 
          } 
      }//else 
    } 
    catch(Exception exe) 
    { 
    out.println(exe); 
    break; 
    }  
        } 

請建議我如何解決異常並將圖像發送到服務器。

在此先感謝。 Teja。

回答

0

對不起,我沒有時間來檢查在你的代碼,看看什麼是錯的,但我以前用過這個solution by Jason Woods

+0

嗨peter_budo,我使用的代碼,它不工作。由於我將圖片上傳到服務器,因此無法上傳。Jason Woods的代碼適合您,因爲它不適合我。 – Teja

+0

不工作是非常廣泛的,你能更具體什麼不工作? –

+0

我使用相同的代碼,通過使用多部分表單數據將圖像上傳到服務器。通過使用OutputStream在服務器端上載圖像,它顯示空的附近List items = upload.parseRequest(request); – Teja

相關問題