21xrx.com
2025-03-21 00:17:44 Friday
文章检索 我的文章 写文章
「教程」Java文件上传的几种方式,向你详细介绍
2023-06-12 11:23:58 深夜i     10     0
Java 文件上传 Servlet Commons

文件上传在网络开发中属于一个基础而又必要的功能,而Java作为一种广泛应用于网络开发的编程语言,也自然要学习它的文件上传方式。本文将向你介绍Java文件上传的几种方式。

一、使用Servlet实现文件上传

使用Servlet实现文件上传需要先了解HTTP协议中关于文件上传的几个标准头信息,例如Content-Type、Content-Disposition以及Content-Length等。Servlet通过对收到的请求进行解析,获取到HTTP协议中的几个标准头信息,并进而获取到文件的相关信息,最终完成文件的上传。

以下是使用Servlet实现文件上传的代码示例:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
  File file = new File(savePath);
  if (!file.exists() && !file.isDirectory()) {
    System.out.println("目录或文件不存在!");
    file.mkdir();
  }
  DiskFileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  upload.setHeaderEncoding("UTF-8");
  if (!ServletFileUpload.isMultipartContent(request))
    return;
  
  List
  itemList = null;
 
  try {
    itemList = upload.parseRequest(request);
  } catch (FileUploadException e) {
    e.printStackTrace();
  }
  for (FileItem item : itemList) {
    if (item.isFormField()) {
      String name = item.getFieldName();
      String value = item.getString("UTF-8");
      System.out.println(name + " = " + value);
    } else {
      String fileName = item.getName();
      if (fileName == null || fileName.trim().equals(""))
        continue;
      
      fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
      InputStream inputStream = item.getInputStream();
      FileOutputStream outputStream = new FileOutputStream(savePath + "\\" + fileName);
      byte[] buffer = new byte[1024];
      int len = 0;
      while ((len = inputStream.read(buffer)) > 0) {
        outputStream.write(buffer, 0, len);
      }
      inputStream.close();
      outputStream.close();
      item.delete();
      System.out.println("文件上传成功!");
    }
  }
}

二、使用Commons FileUpload实现文件上传

Commons FileUpload是Apache基金会下的一个用于文件上传的开源项目,其在文件上传中优化了很多细节,并提供了许多方便的API,可以让Java文件上传变得更加简单方便。

以下是使用Commons FileUpload实现文件上传的代码示例:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
  File file = new File(savePath);
  if (!file.exists() && !file.isDirectory()) {
    System.out.println("目录或文件不存在!");
    file.mkdir();
  }
  DiskFileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  upload.setHeaderEncoding("UTF-8");
  if (!ServletFileUpload.isMultipartContent(request))
    return;
  
  List
  itemList = null;
 
  try {
    itemList = upload.parseRequest(request);
  } catch (FileUploadException e) {
    e.printStackTrace();
  }
  for (FileItem item : itemList) {
    if (item.isFormField()) {
      String name = item.getFieldName();
      String value = item.getString("UTF-8");
      System.out.println(name + " = " + value);
    } else {
      String fileName = item.getName();
      if (fileName == null || fileName.trim().equals(""))
        continue;
      
      fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
      InputStream inputStream = item.getInputStream();
      FileOutputStream outputStream = new FileOutputStream(savePath + "\\" + fileName);
      byte[] buffer = new byte[1024];
      int len = 0;
      while ((len = inputStream.read(buffer)) > 0) {
        outputStream.write(buffer, 0, len);
      }
      inputStream.close();
      outputStream.close();
      item.delete();
      System.out.println("文件上传成功!");
    }
  }
}

三、使用Spring MVC实现文件上传

Spring MVC是Spring Framework中的Web开发框架,相比于Servlet和Commons FileUpload方式,它最大的优势是缩短了我们编写的代码量,极大地提高了开发效率。

以下是使用Spring MVC实现文件上传的代码示例:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public Map
  uploadFile(@RequestParam(value = "file") MultipartFile file) {
 
  Map
  map = new HashMap<>();
 
  String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
  File targetFile = new File(savePath);
  if (!targetFile.exists() && !targetFile.isDirectory()) {
    System.out.println("目录或文件不存在!");
    targetFile.mkdir();
  }
  if (file.isEmpty()) {
    map.put("result", "ERROR");
    map.put("message", "文件为空!");
    return map;
  }
  String fileName = file.getOriginalFilename();
  String suffixName = fileName.substring(fileName.lastIndexOf("."));
  fileName = UUID.randomUUID() + suffixName;
  File destFile = new File(savePath + "\\" + fileName);
  try {
    file.transferTo(destFile);
    map.put("result", "SUCCESS");
    map.put("message", "文件上传成功!");
  } catch (IOException e) {
    e.printStackTrace();
    map.put("result", "ERROR");
    map.put("message", "文件上传失败!");
  }
  return map;
}

FileUpload、Spring MVC

  
  

评论区