文件上传工具类
package com.javasm.controller;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
* 文件上传处理类
* 处理客户端上传的文件,生成唯一的文件名并保存到服务器指定目录
*
* @author Administrator
* @date 2024-12-11
*/
@WebServlet("/upDemo")
@MultipartConfig
public class UpLoadDemo extends HttpServlet {
/**
* 处理文件上传请求
*
* @param req 请求对象
* @param resp 响应对象
* @throws ServletException 如果请求处理时出现异常
* @throws IOException 如果I/O操作出错
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取上传的文件(Part对象封装了文件数据)
Part myfile = req.getPart("myfile");
// 获取应用程序的实际路径(即当前服务器所在路径)
String realPath = req.getServletContext().getRealPath("/");
System.out.println("应用程序路径: " + realPath);
// 设置文件存储的相对路径
String folderPath = "upload/";
// 获取文件的扩展名
String suffix = myfile.getSubmittedFileName().substring(myfile.getSubmittedFileName().lastIndexOf("."));
// 获取当前时间,并格式化为 "yyyy-MM-dd"
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = simpleDateFormat.format(new Date());
// 构造文件存储的目录路径
File dir = new File(realPath + folderPath + formattedDate);
// 如果目录不存在,则创建该目录
if (!dir.exists()) {
dir.mkdirs();
}
// 输出创建的目录路径
System.out.println("文件保存目录: " + dir.getAbsolutePath());
// 生成唯一的文件名
UUID uuid = UUID.randomUUID();
String fileName = uuid + suffix;
// 构造完整的文件路径
File file = new File(dir, fileName);
// 将上传的文件写入目标文件
myfile.write(file.getAbsolutePath());
// 响应给客户端,表示文件上传成功
resp.getWriter().write("文件上传成功,保存路径:" + file.getAbsolutePath());
}
}