首先来看看在JSP中上传是如何做的:
从upload.jsp中选择文件上传,在result.jsp中读取上传文件的内容,注意:在form中,method必须使用post,enctype必须使用multipart/form-data
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<body>
<form action="result.jsp" method="post" enctype="multipart/form-data">
File:<input type="file" name="file"><br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
result.jsp
<%@ page language="java" pageEncoding="gb2312"%>
<%@ page import="java.io.*"%>
<html>
<body>
<%
InputStream is = request.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(is));
String buff = null;
while((buff = bf.readLine()) != null)
{
out.print(buff+"<br>");
}
%>
</body>
</html>
Struts2的上传下载依赖Apache common开源项目。具体是以下两个包:
commons-fileupload-1.2.2-bin.zip
下载地址:http://commons.apache.org/io/download_io.cgi
commons-io-1.4-bin.zip
下载地址:http://commons.apache.org/fileupload/download_fileupload.cgi
下面使用fileupload包,编写一个servlet,接收上传的文件,并放入临时文件夹中存放
package com.test.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
//取得WebToot目录下的upload目录
String path = req.getRealPath("/upload");
//设置临时文件存放目录
factory.setRepository(new File(path));
//设置阀值大小,低于此值的文件将直接读入内存,高于此值的将直接写入磁盘
factory.setSizeThreshold(1024*1024);
ServletFileUpload upload = new ServletFileUpload(factory);
try{
List<FileItem> list = upload.parseRequest(req);
//取出所有的表单,如从upload.jsp页面转来的username,password,file1,file2
for(FileItem item:list){
//判断是否是非file类型
if(item.isFormField()){
String name = item.getFieldName();
//取出表单中的值
String value = item.getString("gbk");
req.setAttribute(name, value);
}else{
//取出路径及文件名: C:\Users\Bruce\Desktop\Jobs.txt,有的浏览器只有文件名,没有路径名
String name = item.getName();
int start = name.lastIndexOf("\\");
String fileName = name.substring(start+1);
req.setAttribute(name, fileName);
item.write(new File(path,fileName));
}
}
}catch (Exception e) {
e.printStackTrace();
}
req.getRequestDispatcher("upload/result2.jsp").forward(req,resp);
}
}
在web.xml文件中进行配置
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.test.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>