前期准备:
一个index.jsp页面,一个main.jsp页面;
一个java包,里面两个java文件,一个负责文件的上传操作,一个执行文件的下载操作
文件的下载类:
package com.file.servlet;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
/**
* 文件下载
* @author Administrator
*
*/
@WebServlet("/down")
public class FileDownServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filename = "E:\\zt.jpg";
String contentType = this.getServletContext().getMimeType(filename);
String contentDisposition = "attachment;filename=zt.jpg";
//设置响应头
response.setHeader("Content-Type", contentType);
response.setHeader("Content-Disposition", contentDisposition);
//使用输入流读取服务器上的文件
FileInputStream fis = new FileInputStream(filename);
//使用Servlet的输出流,向客户端响应
ServletOutputStream sos = response.getOutputStream();
//使用commons-io工具中的拷贝功能
IOUtils.copy(fis, sos);
fis.close();
}
}
文件的下载:
package com.file.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* 文件上传
* @author Administrator
*
*/
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置接收文件的编码
request.setCharacterEncoding("utf-8");
//获取当前项目的根目录(带盘符的)
String path = getServletContext().getRealPath("/");
//1、创建文件工厂对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//2、创建解析器对象
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
//3、通过解析器,获取上传的文件
List<FileItem> fileList = sfu.parseRequest(request);
/*for (FileItem fileItem : fileList) {
//获取普通表单项
boolean b = fileItem.isFormField();
if(b){
System.out.println("属性名:"+fileItem.getFieldName());
System.out.println(fileItem.getFieldName()+"属性值:"+fileItem.toString());
}
}*/
//获取普通表单项
FileItem fileItem01 = fileList.get(0);
String userName = fileItem01.getString("utf-8");
//获取文件表单项
FileItem fileItem = fileList.get(1);
//设置文件的相对路径
String filePath = "img/"+new Date().getTime()+"_"+fileItem.getName();
String str = path+filePath;
System.out.println("filePath = "+filePath);
System.out.println("str = "+str);
System.out.println("path = "+ path);
//创建保存文件的一个载体
File file = new File(str);
//保存文件
fileItem.write(file);
//文件上传成功以后跳转到main页面
request.setAttribute("name", userName);
request.setAttribute("imgUrl", filePath);
request.getRequestDispatcher("main.jsp").forward(request, response);
/*//获取文件名
String fileName = fileItem.getName();
String name = new Date().getTime()+"_"+fileName;
//创建保存文件的一个载体
File file = new File("E:\\"+name);
//保存文件
fileItem.write(file);*/
} catch (Exception e) {
e.printStackTrace();
}
}
}
index.jsp页面:
<body>
<form action="upload" method="post" enctype="multipart/form-data">
文件名:<input type="text" name="filename"><br>
文件:<input type="file" name="myFile"><br>
<input type="submit" value="上传">
</form>
<a href="down">下载资源</a>
</body>
mian.jsp页面:
用户名:${name} <br>
<img alt="" src="<%=basePath%>${imgUrl}">