文件上传
需要 jar 依赖包(2个):
核心jar包: commons-fileupload-1.4.jar
辅助jar包: commons-io-2.6.jar
java Servlet 代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 创建文件工厂
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 2. 创建文件管理对象
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
// 3. 判断是否有上传文件的操作
if(servletFileUpload.isMultipartContent(request)) {
try {
// 当前有文件上传操作
// 4. 解析request对象,将所有请求参数封装到list中
List<FileItem> fileList = servletFileUpload.parseRequest(request);
// 5. 遍历所有请求参数对象
for (FileItem fileItem : fileList) {
// 6. 判断是否为普通表单元素(上传文件不属于普通表单元素)
if(fileItem.isFormField()) {
// 7. 输出普通表单元素的name属性 值
System.out.println(fileItem.getFieldName());
// 8. 输出普通表单元素的value 值(以UTF-8格式解析)
System.out.println(fileItem.getString("utf-8"));
}else {
// *** 处理上传文件 ***
// 9. 输出文件name属性 值
System.out.println(fileItem.getFieldName());
// 10. 获取文件名称 (1.jpg)
System.out.println(fileItem.getName());
// 11. 将文件写入磁盘 e 中(如果磁盘中有重名文件,则写入失败,抛出异常)
fileItem.write(new File("e:\\" + fileItem.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
// 非上传文件的操作,request.getParameter() 普通方法处理
System.out.println(request.getParameter("username"));
}
// 页面跳转
response.sendRedirect(request.getContextPath() + "/DownLoad.jsp");
}
Upload.jsp 页面代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form enctype="multipart/form-data" action="/day_02/uploadServlet.action" method="post">
username: <input type="text" name="username" />
<hr />
<input type="file" name="imgHead" accept=".jpg,.png">
<hr />
<button type="file" class="btn btn-info">上传文件</button>
</form>
</body>
</html>
文件下载
使用jar包(1个):
输出输入流工具包: commons-io-2.6.jar
java Servlet 代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 获取下载文件名
String downFileName = "小雪人.png";
// 2. 通过ServletContenxt 对象 读取服务器上的下载文件
ServletContext servletContext = getServletContext();
InputStream downFileStream = servletContext.getResourceAsStream("/imgHead/" + downFileName);
// 3. 告诉客户端返回的数据类型
String mimeType = servletContext.getMimeType("/imgHead/" + downFileName);
response.setContentType(mimeType);
// 4. 告诉客户端是受到的数据使用与下载操作
// response.setHeader("Content-Disposition", "attachment;filename=" + downFileName);
// 4.1. 依据不同的浏览器返回文件下载信息(解决Chrome 与 FireFox 中文乱码问题)
if(request.getHeader("user-Agent").contains("Firefox")) {
response.setHeader("Content-Disposition", "attachment;filename==?UTF-8?B?" + new BASE64Encoder().encode(downFileName.getBytes("UTF-8")) + "?=" );
}else {
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(downFileName, "UTF-8"));
}
// 5. 将读去的流形式的文件,复制给response的输出流,传回服务端
OutputStream outputStream = response.getOutputStream();
IOUtils.copy(downFileStream, outputStream);
}