客户端浏览器向WEB服务器上传文件是件比较复杂的事,之前我们有[jsp实现文件上传]和[Servlet中实现文件上传] 这两种方式,我们发现那都需要写很多代码,而使用Struts为我们提供的文件上传机制就简单容易的多了。
这里我们使用第三方组件来实现上传,需要的jar包为:commons-fileupload-1.0.jar
使用Jbuilder建立好工程后,先创建一个jsp页面,该页面代码如下:
<%@page contentType="text/html; charset=GBK"%>其中form的enctype属性是必填项。接下来创建上传处理页面,代码如下:
<html>
<head>
<title>static</title>
</head>
<body>
<h3 align="center">上传静态页面</h3>
<table border="1" align="center">
<form action="upload2.jsp" method="POST" enctype="Multipart/form-data">
<tr>
<td>
<input type="file" name="file1"/>
</td>
</tr>
<tr>
<td>
<input type="file" name="file2"/>
</td>
</tr>
<tr>
<td align="right">
<input type="submit" name="submit" value="上传"/>
</td>
</tr>
</form>
</table>
</body>
</html>
<%@page contentType="text/html; charset=GBK" import="java.util.*,java.io.*"%>
<%@page import="org.apache.commons.fileupload.*,com.accp.*"%>
<%DBManager dbm = new DBManager();%>
<%
//实例化上传对象
DiskFileUpload dfu = new DiskFileUpload();
//设置上传文件大小 单位:字节
dfu.setSizeMax(100000);
//设置最多在内存中存储的数据大小 单位:自己
dfu.setSizeThreshold(50000);
// 设置一旦文件大小超过getsizethreshold()的值时数据存放在硬盘的目录
dfu.setRepositoryPath("E:\\FileUpload\\TEMP");
List fileitems = null;
try {
//开始读取上传文件
fileitems = dfu.parseRequest(request);
}
catch (Exception ex) {
}
// 依次处理每个上传的文件
Iterator it = fileitems.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next(); //强制类型转换为FileItem
String str = item.getName();
// System.out.println("strFist = " + str);
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
//保存上传的文件到指定的目录
File dir = new File("E:\\FileUpload");
//如果浏览器传送的文件名是全路径名,则取出文件名。
int i = str.lastIndexOf(File.separator); //File.separator = "\\"
if (i > 0) {
str = str.substring(i + 1, str.length());
}
//System.out.println("dir = " + dir);
// System.out.println("str = " + str);
File names = new File(dir, str);
System.out.println("names = " + names);
if (dbm.insert(names.toString())) {
System.out.println("保存成功");
}
try {
item.write(names); //写入文件
}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("写入文件出错");
}
}
}
out.print("上传成功啦");
%>