jsp文件上传与下载实例代码

我来给您讲解一下“JSP文件上传与下载实例代码”的完整攻略。

步骤一:添加文件上传功能

首先,在JSP页面上添加文件上传功能,可以使用HTML中的<form>表单和<input>标签实现。上传文件时,需要使用enctype属性来指定提交的方式为multipart/form-data。以下是一个简单的文件上传表单的例子:

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

在上传文件的JSP页面upload.jsp中,需要使用Java文件上传类库,例如Apache Commons FileUpload,来处理文件上传逻辑。以下是一个使用Apache Commons FileUpload的例子:

<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.util.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>

<%
    // Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);

    // Parse the request
    List<FileItem> items = upload.parseRequest(request);

    // Process the uploaded files
    for (FileItem item : items) {
        if (!item.isFormField()) {
            String fileName = item.getName();
            File uploadedFile = new File("path/to/uploads", fileName);
            item.write(uploadedFile);
        }
    }
%>

将以上代码保存为upload.jsp,在浏览器中访问upload.jsp页面,即可上传文件并保存到指定的文件夹中。

步骤二:添加文件下载功能

接下来,我们需要添加文件下载功能。首先,我们需要在JSP页面上显示可供下载的文件列表,并使用<a>标签为每个文件指定下载链接。以下是一个简单的文件下载列表的例子:

<ul>
    <li><a href="download.jsp?file=example.zip">example.zip</a></li>
    <li><a href="download.jsp?file=example.pdf">example.pdf</a></li>
</ul>

在文件下载的JSP页面download.jsp中,我们需要通过获取URL参数file来确定要下载的文件,并将该文件作为输出流写入到HTTP响应中,供用户下载。以下是一个简单的文件下载的例子:

<%@ page import="java.io.*"%>
<%@ page import="javax.servlet.ServletOutputStream"%>

<%
    String fileName = request.getParameter("file");
    String filePath = "path/to/uploads/" + fileName;

    File file = new File(filePath);

    if (file.exists()) {
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");

        FileInputStream in = new FileInputStream(file);
        ServletOutputStream out = response.getOutputStream();

        byte[] buffer = new byte[4096];
        int length = 0;
        while ((length = in.read(buffer)) > 0) {
            out.write(buffer, 0, length);
        }

        in.close();
        out.close();
    } else {
        out.print("File not found!");
    }
%>

将以上代码保存为download.jsp,在浏览器中访问download.jsp页面,即可下载指定的文件。

示例一:上传图片并在网站上显示

现在,让我们来看一个实际的应用场景。假设我们需要允许用户上传图片并在网站上显示。首先,在JSP页面上添加文件上传功能,如上所述,然后在成功上传文件后,将文件名保存在一个List中。然后,在页面上展示已经上传的图片,并为每张图片添加下载链接。以下是一个简单的文件上传和图片展示的例子:

<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.util.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.List"%>
<%@ page contentType="text/html" pageEncoding="UTF-8"%>

<%
    // Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);

    // Parse the request
    List<FileItem> items = upload.parseRequest(request);

    // Process the uploaded files
    List<String> uploadedFiles = new ArrayList<String>();
    for (FileItem item : items) {
        if (!item.isFormField()) {
            String fileName = item.getName();
            File uploadedFile = new File("path/to/uploads", fileName);
            item.write(uploadedFile);
            uploadedFiles.add(fileName);
        }
    }
%>

<!DOCTYPE html>
<html>
<head>
    <title>文件上传示例</title>
</head>
<body>
    <h1>上传图片</h1>
    <form action="upload.jsp" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="上传">
    </form>

    <h1>已上传图片</h1>
    <ul>
        <%
            for (String file : uploadedFiles) {
                out.println("<li><img src='path/to/uploads/" + file + "' width='100'><br><a href='download.jsp?file=" + file + "'>" + file + "</a></li>");
            }
        %>
    </ul>
</body>
</html>

在以上代码中,我们利用了<img>标签来显示图片,它会自动从指定的URL路径加载图片。

示例二:下载PDF格式的表格

现在,让我们看另一个实例,假设我们需要为用户提供一个可以下载PDF格式表格的页面。首先,我们需要创建一个表格,并使用JavaScript将其转换为PDF格式。然后,在JSP页面上添加下载链接,并为其添加参数file以便指定下载的文件。以下是一个简单的例子:

<!DOCTYPE html>
<html>
<head>
    <title>文件下载示例</title>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
    <script>
        function downloadPDF() {
            var doc = new jsPDF();
            doc.text(20, 20, 'This is a PDF table!');
            doc.autoTable({html: '#my-table'});
            doc.save('example.pdf');
        }
    </script>
</head>
<body>
    <h1>下载PDF格式表格</h1>
    <button onclick="downloadPDF()">下载表格</button>

    <table id="my-table">
        <thead>
            <tr>
                <th>Name</th>
                <th>Gender</th>
                <th>Age</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>John Doe</td>
                <td>Male</td>
                <td>30</td>
            </tr>
            <tr>
                <td>Jane Doe</td>
                <td>Female</td>
                <td>25</td>
            </tr>
        </tbody>
    </table>

    <br>
    <a href="download.jsp?file=example.pdf">下载表格</a>
</body>
</html>

在以上代码中,我们使用了jsPDF库来生成PDF格式的表格,并将其保存为example.pdf文件。然后,我们在页面上添加下载链接,并指定文件名为example.pdf

接下来,在download.jsp中,我们需要使用以下代码将指定的PDF文件作为数据流写入到HTTP响应中,并提供给用户下载:

<%@ page import="java.io.*"%>
<%@ page import="javax.servlet.ServletOutputStream"%>

<%
    String fileName = request.getParameter("file");
    String filePath = "path/to/uploads/" + fileName;

    File file = new File(filePath);

    if (file.exists()) {
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");

        FileInputStream in = new FileInputStream(file);
        ServletOutputStream out = response.getOutputStream();

        byte[] buffer = new byte[4096];
        int length = 0;
        while ((length = in.read(buffer)) > 0) {
            out.write(buffer, 0, length);
        }

        in.close();
        out.close();
    } else {
        out.print("File not found!");
    }
%>

以上就是“JSP文件上传与下载实例代码”的完整攻略,希望可以帮到您!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp文件上传与下载实例代码 - Python技术站

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

相关文章

  • 使用Spring Boot实现操作数据库的接口的过程

    使用Spring Boot实现操作数据库的接口的过程大致可以分为以下几个步骤: 准备工作:创建一个Spring Boot项目并添加必要的依赖。 配置数据库连接:在application.properties文件中配置数据库的连接信息,如数据库的URL、用户名、密码等。 定义数据模型:创建一个Java类来表示数据库中的数据表,包括表的字段和相关方法。 定义数据…

    Java 2023年5月20日
    00
  • Java设计模式之java迭代器模式详解

    Java设计模式之Java迭代器模式详解 迭代器模式(Iterator Pattern)是很多程序员最常用的一种设计模式,它主要用来遍历集合(Collection)中的元素,让我们能够在不暴露集合底层实现的情况下,按照一定顺序访问集合中的元素。本文将详细讲解Java迭代器模式在设计中的应用,以及如何实现Java迭代器模式。 迭代器模式简介 迭代器模式是一种行…

    Java 2023年5月23日
    00
  • java使用枚举封装错误码及错误信息详解

    关于“java使用枚举封装错误码及错误信息详解”的完整攻略,以下是详细的讲解。 1. 为什么要使用枚举封装错误码及错误信息 在开发中,遇到错误是无法避免的。此时通常会使用异常来进行处理,而在异常中要包含错误码和错误信息。这些错误码和错误信息通常很多,如果使用字符串或数字来表示,会导致代码可读性差、容易出错。而使用枚举类型,可以将这些错误码和错误信息封装到一起…

    Java 2023年5月27日
    00
  • Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍

    Java中的对象复制分为深复制和浅复制两种,本文将为大家介绍这两种复制方式,以及如何实现和应用。 一、浅复制 浅复制是指新对象只复制了原对象中的基本数据类型和引用类型变量的内存地址,而不会再次为引用类型创建新的内存空间,新对象和原对象共享引用类型变量所指向的内存空间。下面是一个浅复制示例: public class Student implements Cl…

    Java 2023年5月26日
    00
  • SpringBoot基于SpringSecurity表单登录和权限验证的示例

    下面是 SpringBoot 基于 SpringSecurity 表单登录和权限验证的完整攻略。 什么是SpringSecurity? SpringSecurity 是一个基于 Spring 的安全框架,专注于为应用程序提供身份验证和授权。SpringSecurity 提供了一套安全框架,可轻松地将安全性集成到 Spring 应用程序中。 SpringBoo…

    Java 2023年5月20日
    00
  • IDEA2020.2.3 “reading maven projects”卡住的问题

    问题描述: 在使用IntelliJ IDEA 2020.2.3进行Maven项目的读取时,出现了卡在”Reading Maven Projects”阶段的情况,无法继续进行下一步操作。 解决方案: 清空本地Maven仓库 首先尝试清空本地Maven仓库,步骤如下: 1)在命令行使用以下命令清空本地Maven仓库: mvn dependency:purge-l…

    Java 2023年5月20日
    00
  • Java打印流原理及实例详解

    Java打印流原理及实例详解 Java打印流是Java IO包中非常常用的一个类库,通过打印流可以方便地向文件或者控制台等输出设备写入数据,下面我们来详细讲解Java打印流的原理及实例。 打印流的作用 打印流是为了方便输出数据而专门开发的一种处理流,在Java中,通过打印流我们可以将数据方便地输出到控制台或者文件中,可以轻而易举地实现输出文件、日志和其他信息…

    Java 2023年5月26日
    00
  • 浅谈Action+Service +Dao 功能

    “浅谈Action+Service+Dao功能”通常是指基于JavaEE三层架构的应用开发模式,其中包括表示层(Action)、业务逻辑层(Service)和数据访问层(Dao)三个核心部分。下面我会详细讲解每个部分的作用和功能,并提供两个示例。 一、Action层 1.1 概述 Action层通常是指MVC框架中的控制器部分,负责接收用户请求,提交用户输入…

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