Upload Download
Two, the code
1. Upload
Precondition:
- Must use forms, not hyperlinks;
- The method of the form must be POST, not GET;
- The enctype of the form must be multipart/form-data;
- Add the file form field to the form, ie <input type="file".../>
jsp page code:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="/u/upload" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name"><br>
头像:<input type="file" name="img" value=""><br>
<input type="submit" value="提交">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/u/work" method="post" enctype="multipart/form-data">
图片: <input type="file" name="jpg" value=""><br>
音频: <input type="file" name="mp3" value=""><br>
视频: <input type="file" name="mp4" value=""><br>
word文档: <input type="file" name="word" value=""><br>
<input type="submit" value="提交">
</form>
</body>
</html>
servlet code:
package servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建工厂类DiskFileItemFactory对象:
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.使用工厂创建解析器对象:
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//设置文件名称编码
fileUpload.setHeaderEncoding("utf-8");
try {
//3.使用解析器来解析request对象:
List<FileItem> list = fileUpload.parseRequest(request);
System.out.println(list.size());
for (FileItem item : list) {
if (item.isFormField()){
//普通字段--姓名
String name = item.getFieldName();
String value = item.getString("utf-8");
System.out.println(name+"--"+value);//name--康熙
}else {
//文件字段--头像
String name = item.getName();
System.out.println("文件名称:"+name);//康熙.jpg
System.out.println("文件大小:"+item.getSize());
//上传操作
//根据工程的相对路径返回一个磁盘绝对路径
String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
System.out.println(realPath);
item.write(new File(realPath,System.currentTimeMillis()+name));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package work;
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;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
@WebServlet("/work")
public class WorkServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
DiskFileItemFactory d = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(d);
fileUpload.setHeaderEncoding("utf-8");
try {
List<FileItem> list = fileUpload.parseRequest(request);
for (FileItem item : list) {
String name = item.getName();
String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
item.write(new File(realPath,System.currentTimeMillis()+name));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. Download
jsp page code:
<%@ page import="java.io.File" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>展示所有的图片资源</title>
</head>
<body>
<%
//1.获取某个文件夹下所有文件的名称,存入session中
File file = new File("D:\\java-two-train\\out\\artifacts\\day22_filedownload_war_exploded\\WEB-INF\\upload");
String[] imgName = file.list();
session.setAttribute("imgNames",imgName);
%>
<ul>
<c:forEach var="imgName" items="${sessionScope.imgNames}">
<li>
<a href="/d/down?name=${imgName}">
<img src="/d/show?name=${imgName}">
</a>
</li>
</c:forEach>
</ul>
</body>
</html>
servlet code:
package com;
import org.apache.commons.io.IOUtils;
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 java.io.FileInputStream;
import java.io.IOException;
@WebServlet("/down")
public class ImgDownServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取图片名称参数
String imgName = request.getParameter("name");
FileInputStream is = new FileInputStream("D:\\java-two-train\\out\\artifacts\\day22_filedownload_war_exploded\\WEB-INF\\upload\\"+imgName);
//response响应
//响应头:告诉浏览器以附件的形式展示文件--文件下载和文件响应的区别
response.addHeader("content-disposition","attachment;filename="+
new String(imgName.getBytes("gbk"),"iso8859-1"));
ServletOutputStream os = response.getOutputStream();
IOUtils.copy(is,os);
}
}
package com;
import org.apache.commons.io.IOUtils;
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 java.io.FileInputStream;
import java.io.IOException;
@WebServlet("/show")
public class ImgShowServlet extends HttpServlet {
//根据图片名称,响应该文件数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取图片名称参数
String imgName = request.getParameter("name");
FileInputStream is = new FileInputStream("D:\\java-two-train\\out\\artifacts\\day22_filedownload_war_exploded\\WEB-INF\\upload\\"+imgName);
//response响应
ServletOutputStream os = response.getOutputStream();
IOUtils.copy(is,os);
}
}
to sum up
The above is all the codes for uploading and downloading, mainly for uploading and downloading files such as pictures and videos.