我想用fileupload上传文件,却发现成功不了,在 List fileItems=fu.parseRequest(request)这里出错;我的代码:
try{
DiskFileUpload fu=new DiskFileUpload();
fu.setSizeMax(1000000);
fu.setSizeThreshold(1096);
fu.setRepositoryPath("c:\\");
if(request!=null)
{
List fileItems=fu.parseRequest(request);
Iterator i = fileItems.iterator();
Hashtable ht = new Hashtable();
InputStream in = null;
int size = 0;
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (fi.isFormField()) {
ht.put(fi.getFieldName(), fi.getString());
}
else {
in = fi.getInputStream();
size = (int) fi.getSize();
if (in != null && size > 0) {
ht.put("filetype", fi.getContentType());
ht.put("filename", fi.getName());
}
}
}
}
}catch(Exception e){
e.printStackTrace(System.err);
}
若知出错原因,请赐教,小弟不胜感激!
try{
DiskFileUpload fu=new DiskFileUpload();
fu.setSizeMax(1000000);
fu.setSizeThreshold(1096);
fu.setRepositoryPath("c:\\");
if(request!=null)
{
List fileItems=fu.parseRequest(request);
Iterator i = fileItems.iterator();
Hashtable ht = new Hashtable();
InputStream in = null;
int size = 0;
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (fi.isFormField()) {
ht.put(fi.getFieldName(), fi.getString());
}
else {
in = fi.getInputStream();
size = (int) fi.getSize();
if (in != null && size > 0) {
ht.put("filetype", fi.getContentType());
ht.put("filename", fi.getName());
}
}
}
}
}catch(Exception e){
e.printStackTrace(System.err);
}
若知出错原因,请赐教,小弟不胜感激!
<form method="post" action="/WebModule1/servlet1" enctype="multipart/form-data">
<input type="file" name="image">
<input type="submit" value="上传" name="submit" size="25">
<input type="reset" value="清除" name="clear" size="25">
</form>
而且怪就怪在,我在Eclipse里调试时报这个错,但是把程序复制到tomcat\webapps里后,却又能正常运行了!然后,我换了台电脑,安装了完全一样的JSP环境,却又出这个错了,无论是在Eclipse中还是tomcat\webapps中,都报这个错:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Exception in JSP: /upup.jsp:4441:
42: try {
43: // Parse the request
44: List items = upload.parseRequest(request);真是奇怪,为了排除是客户端(IE)设置的问题,我让这两台电脑互访,结果还是相同的.
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;<> < HttpServlet extends GetFile>
*/
public GetFile() {
super();
}
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
throws ServletException, IOException {
PrintWriter out = response.getWriter();
DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置上传限制等通过此对象设置.
factory.setSizeThreshold(4000); //设置缓存大小,即临时放在内存中的大小
factory.setRepository(new File("d:/fileupload/temp/")); //设置临时文件夹
ServletFileUpload fileUpload=new ServletFileUpload(factory); //构造fileUpload对象
fileUpload.setSizeMax(1024000000);
try {
List list=fileUpload.parseRequest(request);
Iterator item=list.iterator();
while(item.hasNext()){
FileItem fileItem = (FileItem)item.next();
String fileName = fileItem.getName(); //获取上传文件名,接下来处理一下,取出 文件名.扩展名 即可
fileName = fileName.substring(fileName.lastIndexOf("\\"));
File uploadDir = new File("d:/fileupload/uploadDir/",fileName); //构造上传文件存放位置
fileItem.write(uploadDir);
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("上传失败.FileUploadException");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.println("上传失败.Exception");
}
}
// Put your code here
}< uploadfile.jsp
pageEncoding="gb2312"%>
<html>
<head>
</head>
<body>
Please select file(选择上传文件)
<input type="file" >
<input type="submit" value="Upload">
</form>
</body>
</html>
----------------------------------
查阅资料 1 <> 以前一向以 JspSmartUpload 或 Oreilly MultiPartRequest 上載文件到伺服器.
今次使用 Apache Commons FileUpload .首先下載 commons-fileupload-1.1.1.zip
http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi
下載後將 commons-fileupload-1.1.1.jar 放進 Project_name/WEB-INF/lib 裡.下載 commons-io-1.2.zip :
http://jakarta.apache.org/site/downloads/downloads_commons-io.cgi
如果沒有下載這個library,會出現下面這個Exception,這個花了我不了的時間找.
java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStreamUploadExcel.java
public class UploadExcel{
String tempDirectory = "/web_project_path/excel/temp/"; // 設定暫存目錄
String fileDirectory = "/web_project_path/fileupload/"; // 設定上存檔案目錄
String fileExtention = ".xls";
public UploadExcel() {} public int uploadFile(HttpServletRequest request) {
try {
DiskFileItemFactory factory = new DiskFileItemFactory(); // 建立factory
factory.setSizeThreshold(4000); // 設定緩存大小
factory.setRepository(new File(tempDirectory)); // 設定暫存Directory
ServletFileUpload upload = new ServletFileUpload(factory); // 建立Servlet File
upload.setSizeMax(1000000); // 設定上存檔案最大容量
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) { // 這裡lookup所有上存檔案
FileItem item = (FileItem) iter.next(); //if (item.isFormField()) {
// String // 這裡取得parameter的名字
// String value = item.getString(); // 取得parameter的數值
//}
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = item.getName();
// String contentType = item.getContentType();
// boolean isInMemory = item.isInMemory();
// long sizeInBytes = item.getSize();
if(!fileName.endsWith(fileExtention)) continue; //這裡亦可使用contentType來判斷
File uploadedFile = new File(fileDirectory + fieldName
+ ".xls");
item.write(uploadedFile); //將檔案寫到上存目錄
}
} } catch (Exception e) {
System.out.println("Exception (UploadExcel): " + e);
return -1;
}
return 1;
}}
uploadexcel.jsp
<jsp:useBean scope="page" /><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>Upload Excel</title>
</head>
<body><%
int iError = 1;
if (request.getParameter("action") != null
&& request.getParameter("action").equals("upload")) { // 判斷是否上存
iError = myUpload.uploadFile(request);
if(iError > 0){
out.println("<script>alert('Success');</script>");
} else {
out.println("<script>alert('Fail');</script>");
}
} %>
<script type="text/javascript">
function openPopUp(){
self.location = 'excelDownload.jsp';
window.open(self.location,'openWin','');
}
function uploadsave(){
obj = document.formfile;
document.formfile.action='uploadexcel.jsp?action=upload';
document.formfile.submit();
}
</script> <form method="post" enctype="multipart/form-data">
Please select file(Chinese)
<input type="file" >
<br>
<input type="button" value="Preview Excel" >
<input type="button" value="Upload" >
</form>
</body>
</html>
excelDownload.jsp
<%@ page import="java.io.*" %><%
response.setHeader("Content-disposition","attachment; filename=excel_ch.xls");
FileInputStream fis=new FileInputStream("/web_project_path/fileupload/excel_ch.xls");
OutputStream os=response.getOutputStream();
int byteRead;
while(-1 != (byteRead = fis.read())) {
os.write(byteRead);
}
os.close();
if (fis != null)
fis.close();
%>
http://jakarta.apache.org/commons/fileupload/using.html
http://jakarta.apache.org/commons/fileupload/faq.html
-----------------------------------------------------------查阅资料 2 commons-fileupload-1.1.1.jar
commons-io-1.2.jar
commons-beanutils.jar
3个包Upload.html:<html>
<head>
<title>文件上传演示</title>
</head>
<body bgcolor="#3399CC" text="#000000" leftmargin="0" topmargin="40" marginwidth="0" marginheight="0">
<center>
<h1>文件上传演示</h1>
<form method="POST" action="save.jsp" ENCTYPE="multipart/form-data">
<table border="1" width="450" cellpadding="4" cellspacing="2" bordercolor="#9BD7FF">
<tr><td width="100%" colspan="2">
文件1:<input size="40" type="file">
</td></tr>
<tr><td width="100%" colspan="2">
文件2:<input size="40" type="file">
</td></tr>
<tr><td width="100%" colspan="2">
文件3:<input size="40" type="file">
</td></tr>
</table>
<br/><br/>
<table>
<tr><td align="center"><input type="submit" value="开始上传"/></td></tr>
</table>
</form>
</center>
</body>
</html>save.jsp:<%@ page language="java"contentType="text/html;charset=GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<jsp:useBean > </jsp:useBean><html>
<head>
<title>保存上传文件</title>
</head>
<%
System.out.println("...save.jsp....");
String msg = "";
org.apache.commons.fileupload.DiskFileUpload fu = new org.apache.commons.fileupload.DiskFileUpload(); // 此处有修改。。
// 设置允许用户上传文件大小,单位:字节
fu.setSizeMax(100000000);
// maximum size that will be stored in memory?
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath("D:\\temp");
//开始读取上传信息
List fileItems = fu.parseRequest(request);
%>
<body bgcolor="#FFFFFF"text="#000000" leftmargin="0"topmargin="40"marginwidth="0" marginheight="0">
<font size="6"color="blue">文件列表:</font>
<center>
<table cellpadding=0 cellspacing=1 border=1 width="100%">
<tr>
<td bgcolor="#008080">文件名</td>
<td bgcolor="#008080">大小</td>
</tr>
<%
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
org.apache.commons.fileupload.FileItem item = (org.apache.commons.fileupload.FileItem) iter.next(); // 此处有修改。。
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String
long size = item.getSize();
if((name==null||name.equals("")) && size==0)
continue;
%>
<tr>
<td><%=item.getName()%></td>
<td><%=item.getSize()%></td>
</tr>
<%
//保存上传的文件到指定的目录
:','_');
\\','_');
java.io.File f1=new java.io.File("F:\\"+ name); // 此处有修改。。
item.write(f1); // 此处有修改。。
}
}
%>
</table><br/><br/>
<a href="Upload.htm">返回上传页面</a>
</center>
</body>
</html>就OK了
commons-io-1.2.jar
commons-beanutils.jar