Java 如何在j2me中通过多部分/表单数据将图像上传到服务器?

Java 如何在j2me中通过多部分/表单数据将图像上传到服务器?,java,java-me,httpconnection,Java,Java Me,Httpconnection,由于我是j2me新手,所以我尝试在j2me中从手机上传图像。它在服务器端显示异常 org.apache.commons.fileupload.FileUploadException: Processing of ``multipart/form- data request failed. Stream ended unexpectedly at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUpload

由于我是j2me新手,所以我尝试在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开始,我使用代码将图像上传到服务器is

    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;
    }       
                    }
HttpConnection conn=null;
OutputStream os=null;
//InputStream=null;
尝试
{
System.out.println(“url:+serverurl”);
conn=(HttpConnection)连接器。打开(serverurl);
conn.setRequestMethod(HttpConnection.POST);
//字符串postData=“”;
InputStream imgIs=getClass().getResourceAsStream(文件);
字节[]imgData=新字节[imgIs.available()];
imgIs.read(imgData);
conn.setRequestProperty(“内容类型”,“多部分/表单数据;边界=------------------------------------4664151417711”);
os=连接openOutputStream();
//write(message1.getBytes());
//用于第一次图像上载
字符串message1=“”;
信息1+=“-------------------------------4664151417711”+CrLf;
message1+=“内容配置:表单数据;名称=\”照片\“;
文件名=\“”+文件+\“”+CrLf;
message1+=“内容类型:image/jpeg”+CrLf;message1+=CrLf;
write(message1.getBytes());
//发送图像
int指数=0;
int size=1024;
做{
System.out.println(“写入:+索引”);
如果((索引+大小)>imgData.length){
大小=imgData.length-索引;
} 
写入(imgData、索引、大小);
指数+=大小;
进度(imgData.length,index);//更新进度条。

}当(index对不起,我没有时间检查您的代码,看看有什么问题,但我以前使用过这个

嗨,peter_budo,我使用了那个代码,它不起作用。因为我正在将图像上传到服务器,所以它不上传。Jason Woods代码对您有效吗,因为它对我来说不起作用?不起作用是非常广泛的,您能更具体地说什么不起作用吗工作?我使用相同的代码通过使用多部分表单数据将图像上载到服务器。通过使用OutputStream在服务器端上载图像,它在列表项附近显示为空=upload.parseRequest(请求);我将OutputStream替换为OutputStreamWriter,在这里,我可以通过emulator将数据发送到服务器,但通过在手机上运行相同的代码,上面显示了异常显示。我正在使用手机三星monte GT-S5620将图像上传到服务器。