简介
fileupload常用于web文件的上传,因为操作简单效率高,因而比较流行.
添加Maven依赖
<!--fileupload的Maven依赖-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!--处理流时用,fileUpload用-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
fileupload方法
示例
文件的下载
package xin.student.fileoperator;
import org.apache.commons.io.IOUtils;
import javax.servlet.ServletContext;
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.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
@WebServlet("/download")
public class Download extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取要下载的文件名
String downloadFileName = "头像.jpg";
//读取要下载的文件内容
ServletContext servletContext = getServletContext();
String mimeType = servletContext.getMimeType(downloadFileName);
System.out.println("下载的文件类型:" + mimeType);
//在回传前,通过响应头告诉客户端返回的数据类型
resp.setContentType(mimeType);
//获取浏览器不能用utf-8,要用base64
//还要告诉客户端收到的数据是用于下载使用的(还是使用响应头),URLEncoder.encode()把汉字按指定的格式转为%xx的形式
resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(downloadFileName, "UTF-8"));
//获取资源的输入流,服务器解析的地址为http://ip/ 映射到web目录
InputStream resourceAsStream = servletContext.getResourceAsStream("/" + downloadFileName);
//获取相应的输出流
OutputStream outputStream = resp.getOutputStream();
//读取输入流中全部的数据,复制给给输入流,把下载的内容回传给客户端
IOUtils.copy(resourceAsStream, outputStream);
}
}
文件的上传
package xin.student.fileoperator;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import java.io.*;
import java.util.List;
import javax.servlet.ServletInputStream;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet("/uploadServlet")
public class UploadServlet extends HttpServlet {
private String message;
public void init() {
message = "Hello World!";
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
// Hello
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
//判断是不是多段的数据(只有多段的数据,才是上传文件的)
if (ServletFileUpload.isMultipartContent(request)) {
//创建FileItemFactory工厂实现类
FileItemFactory fileItemFactory = new DiskFileItemFactory();
//创建用于解析上传数据的工具类ServletFileUpLoad类
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
try {
//解析上传的数据,得到每一个表单项FileItem
List<FileItem> list = servletFileUpload.parseRequest(request);
for (FileItem fileItem : list) {
//普通表单项目
if (fileItem.isFormField()) {
//获取表单的name属性值
System.out.println("表单项的name属性值:" + fileItem.getFieldName());
//参数是字符集,防止乱码
System.out.println("表单项的value属性值:" + fileItem.getString("UTF-8"));
} else {//上传的是文件
System.out.println("表单项的name属性值:" + fileItem.getFieldName());
System.out.println("上传的文件名:" + fileItem.getName());
fileItem.write(new File("C:\\Users\\Administrator\\Desktop\\文件上传与下载\\"+fileItem.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void destroy() {
}
}
HTML文件
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>File</title>
</head>
<body>
<form action="/uploadServlet" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"/> <br/>
头像:<input type="file" name="photo"> <br/>
<input type="submit" value="上传">
</form>
<a href="/download">下载</a>
</body>
</html>