文件上传工具类

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());
}
}

posted @ 2024-12-11 17:16  langpo  阅读(3)  评论(0编辑  收藏  举报