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日

相关文章

  • Spring Data JPA踩坑记录(@id @GeneratedValue)

    请允许我简单的介绍一下Spring Data JPA以及相关注解。 Spring Data JPA是Spring Framework中一个比较常用且易用的持久层框架,它允许我们使用JPA进行数据库访问操作,简化了数据库操作的代码,在项目的开发中更加高效便捷的实现了基础的CRUD操作。 相关注解有两种,@Id用于标识某个属性为实体类的主键,而@Generate…

    Java 2023年5月20日
    00
  • Java SpringBoot整合shiro-spring-boot-starterqi项目报错解决

    针对“Java SpringBoot整合shiro-spring-boot-starterqi项目报错解决”的问题,我们可以按照以下步骤进行解决: 1. 引入shiro-spring-boot-starter 在pom.xml中加入以下依赖配置 <dependency> <groupId>org.apache.shiro</gr…

    Java 2023年5月19日
    00
  • jsp页面中显示word/excel格式的文档的方法

    要在JSP页面中显示Word/Excel格式的文档,一般使用POI这个Java库来读取和处理这些文件,然后在JSP页面中显示处理后的内容。具体步骤如下: 引入POI库 首先需要在项目中引入POI库,可以通过Maven等方式进行引入。以下是Maven中引入POI和其依赖的pom.xml配置代码: <dependency> <groupId&g…

    Java 2023年6月15日
    00
  • springboot多数据源使用@Qualifier自动注入无效的解决

    这里是 springboot多数据源使用@Qualifier自动注入无效的解决 的完整攻略,按照以下步骤进行操作即可。 问题描述 在 Spring Boot 中使用多数据源时,我们通常会在每个数据源的配置类上使用 @Qualifier 注解来标识不同的数据源,以便在注入时进行区分。但是在有些情况下,这种方式可能会导致注入失败,无法自动注入需要的数据源对象。 …

    Java 2023年5月20日
    00
  • 较详细的JNI简介

    较详细的JNI简介 什么是JNI? JNI(Java Native Interface)是一种可用于Java代码与其他编程语言进行交互的编程接口。通过JNI,Java程序可以调用C、C++、汇编等语言编写的本地程序库,也可以让其他语言的程序调用Java本身的API。 JNI使用流程 编写本地程序库 首先,我们需要编写用其他编程语言如C、C++、汇编等编写的本…

    Java 2023年5月26日
    00
  • CentOS安装solr 4.10.3详细教程

    CentOS安装solr 4.10.3详细教程 简介 Solr是一个开源的全文搜索引擎,使用Java编写,基于Apache Lucene构建。Solr可以用作独立的全文搜索服务器,也可以与其他应用程序集成。 本文将提供在CentOS上安装Solr 4.10.3的完整教程。 步骤 步骤1:安装Java 由于Solr是使用Java编写的,因此必须先安装Java。…

    Java 2023年6月2日
    00
  • servlet之session工作原理简介_动力节点Java学院整理

    我来讲解一下。 Servlet之Session工作原理简介 什么是Session Session是服务器端技术,用于在服务器端保存客户端的数据。 Session的原理 客户端第一次访问服务器时,服务器会创建一个session,并将session的id返回给客户端,客户端在接下来的请求中会将这个id带上。 服务器接收到客户端请求后,根据客户端带来的id找到对应…

    Java 2023年5月20日
    00
  • 微信小程序 免费SSL证书https、TLS版本问题的解决办法

    针对“微信小程序 免费SSL证书https、TLS版本问题的解决办法”,我提供如下完整攻略。 什么是SSL证书和TLS版本 SSL证书可以理解为电子商务网站的身份证,用于证明网站的身份,并通过加密通讯来保护信息不被窃取。而TLS是SSL的升级版本,用于加密网络连接,并确保数据的完整性和机密性。 微信小程序使用SSL证书和TLS版本的必要性 微信小程序要求所有…

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