![]() |
lionsgogo wrote:org.apache.jasper.JasperException: Exception in JSP: /fileupload.jsp:74
71: fileName= FilenameUtils.getName(fileName);
72: out.println("fileName saved="+fileName+"<br>");
73: File uploadedFile = new File(saveDirectory, fileName);
74: item.write(uploadedFile);
75: }
76: }
77: }
為什麼會有錯誤??
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /fileupload.jsp at line 74
71: fileName= FilenameUtils.getName(fileName);
72: out.println("fileName saved="+fileName+"<br>");
73: File uploadedFile = new File(saveDirectory, fileName);
74: item.write(uploadedFile);
75: }
76: }
77: }
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:404)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.io.FileNotFoundException: D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\examples\upload\2009蓮藕粉訂單.txt (系統找不到指定的路徑。)
java.io.FileOutputStream.open(Native Method)
java.io.FileOutputStream.<init>(Unknown Source)
java.io.FileOutputStream.<init>(Unknown Source)
org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:416)
org.apache.jsp.fileupload_jsp._jspService(fileupload_jsp.java:133)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
--------------------------------------------------------------------------------
Apache Tomcat/6.0.20
import java.util.Properties;
public class SysProperties {
public static void main(String[] args) {
Properties sysProps = System.getProperties();
sysProps.list(System.out);
}
}
java SysProperties
LANG="zh_TW.Big5"
檔案名稱 | SysProperties.class |
描述 | 懶得自己編譯者可以直接下載此檔案 |
檔案大小 | 632 bytes |
下載次數 | 3 次 |
![]() |
檔案名稱 | SysProperties.java |
描述 | 取得JVM和OS系統屬性 |
檔案大小 | 225 bytes |
下載次數 | 1 次 |
![]() |
<html>
<head>
<title>File Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
檔案上傳
<form name="upload" enctype="multipart/form-data" method="post" action="fileupload_streaming.jsp">
上傳檔案: <input type="file" name="file" size="20" maxlength="20">
檔案說明: <input type="text" name="filedesc" size="30" maxlength="50">
<input type="submit"value="上傳"> <input type="reset" value="清除">
</form>
</body>
</html>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="org.apache.commons.fileupload.util.Streams"%>
<%@ page import="org.apache.commons.io.FilenameUtils"%>
<%
//String saveDirectory = application.getRealPath("/upload");
// Change save direcoty to another place outside of Tomcat
String saveDirectory = "C:/upload";
File dir = new File(saveDirectory);
if (!dir.exists()) {
boolean success = dir.mkdir();
if (success) {
System.out.println("Directory: " + saveDirectory + " created");
}
}
out.println("file.encoding=" + System.getProperty("file.encoding") + "<br>");
// Solve Chinese filename problem: use original form encoding
String encoding = "UTF-8";
request.setCharacterEncoding(encoding);
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
out.println("isMultipart=" + isMultipart + "<br>");
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();
//Create a progress listener
ProgressListener progressListener = new ProgressListener(){
private long megaBytes = -1;
public void update(long pBytesRead, long pContentLength, int pItems) {
long mBytes = pBytesRead / 1000000;
if (megaBytes == mBytes) {
return;
}
megaBytes = mBytes;
System.out.println("We are currently reading item " + pItems);
if (pContentLength == -1) {
System.out.println("So far, " + pBytesRead + " bytes have been read.");
} else {
System.out.println("So far, " + pBytesRead + " of " + pContentLength
+ " bytes have been read.");
}
}
};
upload.setProgressListener(progressListener);
// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
String value = Streams.asString(stream, encoding);
out.println(name + "=" + value + "<br>");
} else {
System.out.println("File field " + name + " with file name "
+ item.getName() + " detected.");
// Process the input stream
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
out.println("fieldName=" + fieldName + "<br>");
out.println("fileName=" + fileName + "<br>");
out.println("contentType=" + contentType + "<br>");
if (fileName != null && !"".equals(fileName)) {
fileName = FilenameUtils.getName(fileName);
out.println("fileName saved=" + fileName + "<br>");
File uploadedFile = new File(saveDirectory, fileName);
FileOutputStream uploadedFileStream =
new FileOutputStream(uploadedFile);
Streams.copy(stream, uploadedFileStream, true);
}
}
}
%>
檔案名稱 | fileupload_streaming.jsp |
描述 | 檔案上傳處理程式 |
檔案大小 | 3 Kbytes |
下載次數 | 16 次 |
![]() |
檔案名稱 | fileupload_streaming.html |
描述 | 檔案上傳表單 |
檔案大小 | 575 bytes |
下載次數 | 15 次 |
![]() |
So far, 1069001476 of 1073742116 bytes have been read.
We are currently reading item 1
So far, 1070000168 of 1073742116 bytes have been read.
We are currently reading item 1
So far, 1071002992 of 1073742116 bytes have been read.
We are currently reading item 1
So far, 1072001684 of 1073742116 bytes have been read.
We are currently reading item 1
So far, 1073000376 of 1073742116 bytes have been read.
一月 16, 2012 2:25:28 上午 org.apache.catalina.core.StandardWrapperValve invoke
嚴重: Servlet.service() for servlet [jsp] in context with path [] threw exception [An exception occurred processing JSP page /fileupload_streaming.jsp at line 65
62: File uploadedFile = new File(saveDirectory, fileName);
63: FileOutputStream uploadedFileStream =
64: new FileOutputStream(uploadedFile);
65: Streams.copy(stream, uploadedFileStream, true);
66: }
67: }
68: }
Stacktrace:] with root cause
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:309)
at org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:364)
at org.apache.coyote.ajp.AjpProcessor.receive(AjpProcessor.java:331)
at org.apache.coyote.ajp.AbstractAjpProcessor.refillReadBuffer(AbstractAjpProcessor.java:576)
at org.apache.coyote.ajp.AbstractAjpProcessor$SocketInputBuffer.doRead(AbstractAjpProcessor.java:1027)
at org.apache.coyote.Request.doRead(Request.java:422)
at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:429)
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:315)
at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:200)
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
at java.io.InputStream.read(Unknown Source)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
at org.apache.jsp.fileupload_005fstreaming_jsp._jspService(fileupload_005fstreaming_jsp.java:125)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:333)
at org.apache.catalina.ha.session.JvmRouteBinderValve.invoke(JvmRouteBinderValve.java:219)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /fileupload_streaming.jsp at line 65
62: File uploadedFile = new File(saveDirectory, fileName);
63: FileOutputStream uploadedFileStream =
64: new FileOutputStream(uploadedFile);
65: Streams.copy(stream, uploadedFileStream, true);
66: }
67: }
68: }
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:460)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.net.SocketTimeoutException: Read timed out
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(Unknown Source)
java.net.SocketInputStream.read(Unknown Source)
org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:309)
org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:364)
org.apache.coyote.ajp.AjpProcessor.receive(AjpProcessor.java:331)
org.apache.coyote.ajp.AbstractAjpProcessor.refillReadBuffer(AbstractAjpProcessor.java:576)
org.apache.coyote.ajp.AbstractAjpProcessor$SocketInputBuffer.doRead(AbstractAjpProcessor.java:1027)
org.apache.coyote.Request.doRead(Request.java:422)
org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290)
org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:429)
org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:315)
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:200)
org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
java.io.InputStream.read(Unknown Source)
org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
org.apache.jsp.fileupload_005fstreaming_jsp._jspService(fileupload_005fstreaming_jsp.java:125)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.23 logs.
Apache Tomcat/7.0.23
-rw-r--r-- 1 tomcat tomcat 1073094361 2012-01-16 02:25 ppsds.pgf
<session-config>
<session-timeout>10</session-timeout>
</session-config>
andowson wrote:中文檔名上傳後變成亂碼或??的問題可以透過指定來源表單的編碼方式修正,另外上傳目錄也可以修改到Tomcat以外的目錄,例如C:\upload下(目錄不存在時也可以自動建立)
首先將來源表單的charset設為UTF-8
fileupload_streaming.html:
%>
[/code]