使用Servlet实现文件的上传下载必须要导入两个jar包:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
直接上代码:
@WebServlet("/uploadServlet")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
//为解析类提供配置信息 创建文件上传工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建解析类的实例 传入工厂类获取文件上传对象
ServletFileUpload sfu = new ServletFileUpload(factory);
//设置文件最大解析大小(单位:字节)
sfu.setFileSizeMax(1024 * 400);
//每个表单域中数据会封装到一个对应的FileItem对象上
try {
//有的人这里可能会报错,说类型无法转换。那是因为包引错了,Servlet中也有这些类,一定要用前面导入的两个jar包中的类!
List<FileItem> items = sfu.parseRequest(req);
//区分表单域
for (int i = 0; i < items.size(); i++) {
FileItem item = items.get(i);
//isFormField为true,表示这不是文件上传表单域
if (!item.isFormField()) {
//获得文件名
String fileName = item.getName();
String path = req.getRealPath("/upload");
File file = new File(path + "/" + fileName);
if (!file.exists()) {
//将文件写出到指定磁盘
item.write(file);
}
}
}
//传回给前端的标识符
resp.getWriter().write("200");
} catch (Exception e) {
resp.getWriter().write("500");
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}