21xrx.com
2024-09-19 10:08:58 Thursday
登录
文章检索 我的文章 写文章
Java文件上传下载实现:实例代码
2023-06-16 17:00:30 深夜i     --     --
Java 文件上传 文件下载 Servlet HttpServletResponse

在Web应用程序中,文件上传和下载是非常常见的操作。对于Java开发人员而言,实现这些操作并不难,只需要利用一些Java API即可。

本文将为您介绍Java文件上传下载的实现方法,并提供具体的代码示例。

1、文件上传:利用Servlet实现文件上传

文件上传的主要任务是将客户端的文件上传到服务器。按传输方式的不同,文件上传可以分为普通上传和分块上传。普通上传方式是将整个文件一次性上传到服务器,而分块上传则将文件分为若干个小块进行上传,防止网络传输中出现中断等情况。本文中将主要介绍普通上传的实现方法。

Java Servlet提供了处理HTTP请求和响应的方法,因此可以使用Servlet来实现文件上传。具体步骤如下:

1.1、在HTML页面中添加文件上传表单


 Select file to upload:

 

 

form标签中的属性method指定请求的方法为POST,action指定了处理该请求的Servlet的URL,enctype指定编码类型为multipart/form-data。注意,由于上传的是文件,需要使用input标签的类型为file。

1.2、编写Servlet代码处理文件上传


@WebServlet(name = "UploadServlet", urlPatterns = {"/upload"})

@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2,  // 2MB

         maxFileSize = 1024 * 1024 * 10,     // 10MB

         maxRequestSize = 1024 * 1024 * 50)   // 50MB

public class UploadServlet extends HttpServlet {

  protected void doPost(HttpServletRequest request,

             HttpServletResponse response)

      throws ServletException, IOException {

    // 获取上传文件部分

    Part filePart = request.getPart("file");

    // 获取文件名

    String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();

    // 将文件保存到服务器

    String path = getServletContext().getRealPath("/uploads") + File.separator + fileName;

    File file = new File(path);

    try (InputStream inputStream = filePart.getInputStream()) {

      Files.copy(inputStream, file.toPath(), StandardCopyOption.REPLACE_EXISTING);

    }

    response.sendRedirect(request.getContextPath() + "/success.jsp");

  }

}

@WebServlet注解指定了Servlet的名称和URL,这里URL为/upload。@MultipartConfig注解用于指定上传文件的大小限制和存储位置。

doPost方法中,首先通过request.getPart方法获取上传的文件,然后通过Paths.get解析出文件名,接着将文件保存到指定位置。最后使用response.sendRedirect方法跳转到成功页面。

2、文件下载:利用HttpServletResponse实现文件下载

要实现文件下载,只需要从服务器上读取文件,然后将文件通过HttpServletResponse对象写出即可。具体步骤如下:


protected void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

  // 获取文件路径

  String filePath = getServletContext().getRealPath("/downloads/report.xlsx");

  File downloadFile = new File(filePath);

  FileInputStream inStream = new FileInputStream(downloadFile);

  // 设置文件类型为excel

  response.setContentType("application/vnd.ms-excel");

  // 设置下载时文件名

  String headerKey = "Content-Disposition";

  String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName());

  response.setHeader(headerKey, headerValue);

  // 将文件写出到response输出流

  OutputStream outStream = response.getOutputStream();

  byte[] buffer = new byte[4096];

  int bytesRead = -1;

  while ((bytesRead = inStream.read(buffer)) != -1) {

    outStream.write(buffer, 0, bytesRead);

  }

  inStream.close();

  outStream.close();

}

在doGet方法中,首先获取要下载的文件路径,然后通过FileInputStream实例化一个输入流,并设置HttpServletResponse的Content-Type为要下载的文件类型。接着设置Content-Disposition响应头告诉浏览器以下载方式处理响应,并设置文件名,输出文件内容到response的输出流。

3、关键词

Java、文件上传、文件下载、Servlet、HttpServletResponse

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复