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。
嗨peter_budo,我使用的代碼,它不工作。由於我將圖片上傳到服務器,因此無法上傳。Jason Woods的代碼適合您,因爲它不適合我。 – Teja
不工作是非常廣泛的,你能更具體什麼不工作? –
我使用相同的代碼,通過使用多部分表單數據將圖像上傳到服務器。通過使用OutputStream在服務器端上載圖像,它顯示空的附近List items = upload.parseRequest(request); – Teja