package com.gk.java.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
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.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置字符集
response.setContentType("text/html;charset=UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
// 根据工厂对象创建解析类对象
ServletFileUpload fileUpload = new ServletFileUpload(factory);
// 设置单个上传文件的大小
fileUpload.setFileSizeMax(1024 * 50);
// 设置上传文件的总大小 不能超出3M 超过3M的话要在tomcat的server.xml
//<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
//加上 maxSwallowSize="-1"
fileUpload.setSizeMax(1024 * 128);
// 创建文件路径
// 代表项目request.getServletContext();
ServletContext context = request.getServletContext();
// 在项目的根目录下获取upload这个文件夹
String realPath = context.getRealPath("/upload");
//
File f = new File(realPath);
// 判断文件夹是否存在
if (!f.exists()) {
// 没有则创建这个目录
f.mkdirs();
}
try {
List<FileItem> list = fileUpload.parseRequest(request);
for (FileItem fileItem : list) {
/*
* System.out.println("文件内容类型:"+fileItem.getContentType());
* System.out.println("表单name属性:"+fileItem.getFieldName());
* System.out.println("文件名:"+fileItem.getName());
* System.out.println("内容大小:"+fileItem.getSize());
* System.out.println("表单value属性值:"+fileItem.getString("UTF-8"))
* ; System.out.println("-----------------------------");
*/
// 判断属性类型是否是字符串格式的
if (fileItem.isFormField()) {
// 是字符串类型的输出
System.out.println(fileItem.getFieldName());
} else {
// 不是字符串的,
// 加上限制条件只有上传文件大小大于0的才能上传
if (fileItem.getSize() > 0) {
// 先获取文件名
String fileName = fileItem.getName();
// 设置保存文件的文件名上传时间+UUID+文件名称
fileName = System.currentTimeMillis() + "_" + UUID.randomUUID().toString().replaceAll("-", "")
+ "_" + fileName;
// 设置路径
File file = new File(f, fileName);
fileItem.write(file);
}
}
}
response.getWriter().write("上传成功");
} catch (FileSizeLimitExceededException e) {
response.getWriter().write("上传文件超出50K");
e.printStackTrace();
} catch (SizeLimitExceededException e) {
e.printStackTrace();
response.getWriter().write("总文件大小不能超过128Kb...");
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
使用fileUpload实现上传下载demo
最新推荐文章于 2022-06-09 11:11:28 发布