Java 如何在j2me中通过多部分/表单数据将图像上传到服务器?
由于我是j2me新手,所以我尝试在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
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将图像上传到服务器。