JAVA使用commos-fileupload实现文件上传与下载实例解析

在web应用中,文件上传与下载是一个必不可少的功能。本文将演示使用commons-fileupload实现文件上传与下载的完整攻略,并提供两个示例来说明实现过程。

Java使用commons-fileupload实现文件上传与下载实例解析

简介

在web应用中,文件上传与下载是一个必不可少的功能。本文将演示使用commons-fileupload实现文件上传与下载的完整攻略,并提供两个示例来说明实现过程。

涉及技术

  • Java
  • Tomcat
  • Maven
  • commons-fileupload

文件上传

1. 添加依赖

使用Maven来导入commons-fileupload依赖:

<dependencies>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
</dependencies>

2. 文件上传表单

在HTML表单中添加enctype="multipart/form-data"属性:

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

3. 实现上传功能

在Servlet中实现文件上传,示例代码如下:

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Part filePart = request.getPart("file");
        String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();

        OutputStream out = null;
        InputStream fileContent = null;

        try {
            out = new FileOutputStream(new File("upload/" + fileName));
            fileContent = filePart.getInputStream();
            int read = 0;
            final byte[] bytes = new byte[1024];

            while ((read = fileContent.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }

            response.getWriter().append("File uploaded successfully!");
        } catch (FileNotFoundException e) {
            response.getWriter().append("File upload failed!");
        } finally {
            if (out != null) {
                out.close();
            }
            if (fileContent != null) {
                fileContent.close();
            }
        }
    }
}

在Servlet中,通过@MultipartConfig注解来指定处理请求中的文件内容,通过request.getPart("file")方法获取文件Part对象,并通过Part.getSubmittedFileName()方法获取文件名。接着就可以用标准IO操作将文件保存到指定路径。

文件下载

1. 添加依赖

使用Maven来导入下载所需依赖(可选):

<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>28.1-jre</version>
    </dependency>
</dependencies>

2. 实现下载功能

在Servlet中实现文件下载,示例代码如下:

@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String filePath = "upload/demo.txt";
        File downloadFile = new File(filePath);

        if (downloadFile.exists()) {
            String mimeType = Files.probeContentType(downloadFile.toPath());

            if (mimeType == null) {
                mimeType = "application/octet-stream";
            }

            response.setContentType(mimeType);
            response.setHeader("Content-Length", String.valueOf(downloadFile.length()));
            response.setHeader("Content-Disposition", "attachment; filename=" + downloadFile.getName());

            Files.copy(downloadFile.toPath(), response.getOutputStream());
        } else {
            response.getWriter().append("File not found!");
        }
    }
}

在Servlet中,直接通过响应输出流将文件内容读取后写入到响应中即可。通过Files.probeContentType()方法获取文件类型,并通过响应头中的"Content-Disposition"字段指定下载时的文件名。

注意事项

  • 建议限制上传文件大小和类型,以防止用户上传不安全的文件;
  • 建议使用相对路径和Web应用程序的上下文路径来保存和读取文件,以避免跨平台问题。

示例

下面提供两个示例,一个用于上传文件,一个用于下载文件。

上传文件示例

上传文件示例代码请下载这个 Maven 工程并导入到您的IDE中。在Tomcat容器中启动该应用程序,并在浏览器的地址栏中输入以下网址:

http://localhost:8080/myfileupload/upload.jsp

选中文件后点击"Upload"按钮即可上传文件,上传的文件将保存在Web应用程序的"upload"文件夹中。

下载文件示例

下载文件示例代码请下载这个 Maven 工程并导入到您的IDE中。在Tomcat容器中启动该应用程序,并在浏览器的地址栏中输入以下网址:

http://localhost:8080/myfiledownload/download

点击下载按钮即可下载名为"demo.txt"的文件。

本文标题为:JAVA使用commos-fileupload实现文件上传与下载实例解析

基础教程推荐