JAVA使用commos-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实现文件上传与下载实例解析 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 用MyEclipse编写jsp文件一保存就很卡该怎么办?

    当我们使用MyEclipse编写 JSP 文件时,如果一保存文件就很卡,可能的原因就是编辑器加载了大量的插件或者使用的资源占用过高导致的。在此提供以下解决方法: 方法一:升级MyEclipse版本 在旧版的MyEclipse中,一些插件的加载可能会导致软件反应很慢,所以建议更新到稳定的最新MyEclipse版本。 方法二:修改MyEclipse JVM参数 …

    Java 2023年6月15日
    00
  • 在js文件中写el表达式取不到值的原因及解决方法

    在js文件中写el表达式取不到值的原因可能是因为js文件的加载顺序在vue组件实例挂载之前,解决方法一般有两种:使用Vue.mixin全局混入方法和使用this.$nextTick()方法。 使用Vue.mixin全局混入方法 首先在main.js中定义一个mixin,定义一个生命周期函数created,将所有需要共享的数据,例如公共的配置信息,挂到this…

    Java 2023年6月15日
    00
  • Java内存模型可见性问题相关解析

    Java内存模型可见性问题相关解析 Java是一门高级程序设计语言,应用广泛,但是在并发编程时,由于内存可见性问题可能会导致程序出现一些奇怪的行为。本文将详细讲解Java内存模型可见性问题及相关解析。 什么是Java内存模型可见性问题? Java内存模型中存在着共享变量被多个线程同时访问的情况。然而,由于JVM使用CPU缓存等优化策略,可能会将某些共享变量的…

    Java 2023年5月26日
    00
  • Java编写网络聊天程序实验

    Java编写网络聊天程序是Java网络编程的典型案例之一。下面是一份完整的攻略: 确定需求 在开始编写之前,我们需要明确我们的需求是什么。我们的聊天程序需要实现以下功能: 客户端可以连接到服务器 客户端可以发送消息、接收消息 服务器可以广播客户端发送的消息给所有客户端 设计架构 为了实现这些需求,我们需要考虑使用什么样的架构。我们可以使用一个基于线程池的架构…

    Java 2023年5月23日
    00
  • jsp实现简单验证码的方法

    下面是jsp实现简单验证码的方法的完整攻略。 一、什么是验证码 验证码是防止恶意程序自动请求的一种服务端验证机制。常见的验证码有数字、字母、图形等形式,用户需要正确输入验证码才能完成相关操作。 二、实现简单验证码的方法 1. 生成随机验证码 在jsp页面中,我们可以通过以下代码生成一个4位数的随机验证码: <% String code = "…

    Java 2023年6月15日
    00
  • Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException

    当Java程序尝试使用javax.xml.transform包中的Transformer类转换XML文档时,有时会出现“javax.xml.transform.TransformerException: java.lang.NullPointerException”错误。这个错误通常表示程序在加载XML文档时遇到了一个空指针异常。以下是解决该问题的步骤和示例…

    Java 2023年5月27日
    00
  • java简单解析xls文件的方法示例【读取和写入】

    Java简单解析XLS文件的方法示例:读取和写入 1. 概述 XLS是一种Microsoft Excel电子表格文件格式,是常见的办公文档,需要在Java程序中对其进行处理和解析。本文将介绍Java中读取和写入XLS文件的方法,包括使用Apache POI库读取和写入XLS文件。 2. 使用Apache POI库读取XLS文件 Apache POI是一款用于…

    Java 2023年5月20日
    00
  • Spring Security如何为用户示例添加角色详解

    为用户添加角色,是在Spring Security中实现权限控制的重要手段。下面我将详细讲解Spring Security如何为用户示例添加角色,并提供两个示例说明。 1. 添加角色和权限 首先,需要添加角色和权限至Security配置文件中。示例配置代码如下: spring: security: user: name: admin password: ad…

    Java 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部