21xrx.com
2025-03-21 15:09:56 Friday
文章检索 我的文章 写文章
学习Java上传文件的几种方式
2023-06-11 13:14:04 深夜i     --     --
Java 上传文件 框架

我在学习Java过程中,遇到了需要上传文件的场景。于是我就开始了解Java上传文件的几种方式。

第一种方式是使用Servlet API的Part接口。这种方式适用于使用Servlet或JSP来处理文件上传的情况。具体实现如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String savePath = "D:/upload"; // 保存上传文件的目录
  File file = new File(savePath);
  if(!file.exists()&&!file.isDirectory()){
    System.out.println("目录不存在,需要创建");
    file.mkdir();
  }
  //从请求头中获取文件类型
  String contentType = request.getContentType();
  if (contentType != null && contentType.toLowerCase().startsWith("multipart/")) {
    Part filePart = request.getPart("file"); //获取上传文件的Part对象
    String fileName = filePart.getSubmittedFileName(); //获取上传文件的文件名
    filePart.write(savePath + "/" + fileName); //保存上传文件到指定目录
  }
}

第二种方式是使用第三方库commons-fileupload。这种方式相对于第一种方式,有更好的可定制性。具体实现如下:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String savePath = "D:/upload"; // 保存上传文件的目录
  DiskFileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  try {
    List items = upload.parseRequest(request);
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
      FileItem item = (FileItem) iter.next();
      if (!item.isFormField()) {
        String fileName = item.getName();
        File uploadedFile = new File(savePath + "/" + fileName);
        item.write(uploadedFile);
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}

第三种方式是使用Spring MVC框架的MultipartFile接口。这种方式相对于前两种方式,使用起来更加方便。具体实现如下:

@RequestMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
  String savePath = "D:/upload"; // 保存上传文件的目录
  String fileName = file.getOriginalFilename();
  File savedFile = new File(savePath, fileName);
  file.transferTo(savedFile);
  return "success";
}

以上是Java上传文件的几种方式,我觉得第三种方式最为方便。接下来我会继续学习和实践Java的其他功能。

  
  

评论区