工程目录结构:
文件上传:
文件上传用到了commons-fileupload-1.2.1.jar和commons-io-1.4.jar两个jar包。指定将文件上传到服务器的store目录下。
fileupload.jsp:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="username" size="14"><br>
文件:<input type="file" name="file1" size="14">
<input type="submit" value="上传">
</form>
</body>
</html>
这里需要注意两点:第一method方法必须修改为post。第二为form标签添加enctype属性,且值必须为multipart/form-data。<form>标记的enctype属性的默认值为"application/x-www-form-urlencoded",也就是说若未明确添加enctype属性,则使用这个默认值。enctype属性用于指定表单数据的MIME类型,默认值表示表单数据会采用“名字=值”的形式。而对于文件上传,这里必须取值“multipart/form-data”。
FileUploadServlet.java:
public class FileUploadServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload sfu=new ServletFileUpload(factory);
try {
List<FileItem> items=sfu.parseRequest(request);
for(int i=0;i<items.size();i++){
FileItem item=items.get(i);
if(item.isFormField()){
//普通表单域
String paraName=item.getFieldName();
String paraValue=item.getString();
}else{
//文件域
ServletContext ctx=getServletContext();
String path=ctx.getRealPath("store");
String fileName=item.getName();
fileName=fileName.substring(fileName.lastIndexOf("/")+1);
File file=new File(path+"/"+fileName);
item.write(file);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
点击上传,然后到服务器的应用下的store目录下可看到刚才上传的文件。
文件下载:
filedownload.jsp:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<form action="download">
输入要下载的文件名:<br>
<input type="text" name="filename"><input type="submit" value="开始下载">
</form>
</body>
</html>
我们输入刚才上传的web.jpg文件:
FileDownloadServlet.java:
public class FileDownloadServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String filename=request.getParameter("filename");
System.out.println(filename);
response.setContentType("application/force-download");
response.setHeader("Content-Disposition","attachment;filename="+filename);
ServletContext ctx=getServletContext();
InputStream in=ctx.getResourceAsStream("store/"+filename);
System.out.println(in==null);
OutputStream out=response.getOutputStream();
int hasRead=0;
byte[] buffer=new byte[1024];
while((hasRead=in.read(buffer))!=-1){
out.write(buffer,0,hasRead);
}
out.close();
in.close();
}
}
点击开始下载,可以看到浏览器弹出提示下载框。