Jsp页面实现文件上传下载类代码第1/2页

yizhihongxing

“Jsp页面实现文件上传下载类代码”是一个常见的需求,本篇攻略将为大家详细讲解如何实现这一操作。

第1页:文件上传

1. 在前端页面中添加上传文件的表单

首先,在前端页面中添加一个上传文件的表单,用户可以通过该表单上传文件。例如:

<form action="upload.jsp" method="post" enctype="multipart/form-data">
  Select file to upload:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload File" name="submit">
</form>

其中,enctype 属性告诉服务器表单数据的编码类型,multipart/form-data类型用于上传文件。

2. 编写后端JSP代码处理文件上传

上传文件的操作需要在服务器端进行处理,我们可以编写 upload.jsp 页面来实现该功能。代码如下:

<%@ page import="java.io.*, java.util.*, javax.servlet.*, javax.servlet.http.*" %>

<%
  // 上传文件的保存路径
  String savePath = getServletContext().getRealPath("/upload");

  // 创建文件保存目录
  File fileSaveDir = new File(savePath);
  if (!fileSaveDir.exists()) {
    fileSaveDir.mkdir();
  }

  // 获取上传的文件
  String fileName = "";
  String filePath = "";
  String contentType = request.getContentType();
  if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
    DataInputStream in = new DataInputStream(request.getInputStream());
    int formDataLength = request.getContentLength();
    byte dataBytes[] = new byte[formDataLength];
    int byteRead = 0;
    int totalBytesRead = 0;
    while (totalBytesRead < formDataLength) {
      byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
      totalBytesRead += byteRead;
    }

    String file = new String(dataBytes);
    fileName = file.substring(file.indexOf("filename=") + 10);
    fileName = fileName.substring(0, fileName.indexOf("\n"));
    fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.indexOf("\""));
    int lastIndex = contentType.lastIndexOf("=");
    String boundary = contentType.substring(lastIndex + 1, contentType.length());
    int pos;
    pos = file.indexOf("filename=\"");
    pos = file.indexOf("\n", pos) + 1;
    pos = file.indexOf("\n", pos) + 1;
    pos = file.indexOf("\n", pos) + 1;
    int boundaryLocation = file.indexOf(boundary, pos) - 4;
    int startPos = ((file.substring(0, pos)).getBytes()).length;
    int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
    filePath = savePath + "\\" + fileName;
    FileOutputStream fileOut = new FileOutputStream(filePath);
    fileOut.write(dataBytes, startPos, (endPos - startPos));
    fileOut.flush();
    fileOut.close();
  }

  // 输出上传成功信息
  out.println("<h2>File Uploaded Successfully!</h2>");
  out.println("<br>");
  out.println("<b>File Name:</b> " + fileName);
  out.println("<br>");
  out.println("<b>File Path:</b> " + filePath);
%>

该代码主要实现了以下功能:

  • 创建文件保存目录;
  • 获取上传的文件;
  • 将文件保存在服务器上;
  • 输出上传文件的相关信息。

3. 运行代码并测试文件上传功能

将上面的代码保存为 upload.jsp,并将其放置在Web应用程序的根目录下。然后,启动Tomcat服务器,并访问该JSP页面上传文件,在上传成功后将显示上传文件的相关信息。

第2页:文件下载

1. 在前端页面中添加下载链接

在前端页面中添加一个下载链接,用户可以通过该链接下载文件。例如:

<a href="download.jsp?fileName=example.pdf">Download File</a>

其中,链接指向的URL为 download.jsp,并携带一个参数 fileName,用于标识要下载的文件名。

2. 编写后端JSP代码处理文件下载

文件下载的操作同样需要在服务器端进行处理,我们可以编写 download.jsp 页面来实现该功能。代码如下:

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

<%
  // 获取要下载的文件名
  String fileName = request.getParameter("fileName");

  // 设置响应头信息,告诉浏览器该响应是一个文件
  response.setContentType("APPLICATION/OCTET-STREAM");
  response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

  // 获取要下载的文件的输入流
  InputStream inputStream = new FileInputStream(getServletContext().getRealPath("/upload/" + fileName));

  // 创建输出流将文件写入响应中
  OutputStream outputStream = response.getOutputStream();
  byte[] buffer = new byte[4096];
  int bytesRead = -1;
  while ((bytesRead = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
  }

  // 关闭输入输出流
  inputStream.close();
  outputStream.close();
%>

该代码主要实现了以下功能:

  • 获取要下载的文件名;
  • 设置响应头信息,告诉浏览器该响应是一个文件;
  • 从服务器上获取要下载的文件的输入流;
  • 创建输出流将文件写入响应中。

3. 运行代码并测试文件下载功能

将上面的代码保存为 download.jsp,并将其放置在Web应用程序的根目录下。然后,启动Tomcat服务器,并访问前端页面中的下载链接,在下载成功后将下载文件到本地。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jsp页面实现文件上传下载类代码第1/2页 - Python技术站

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

相关文章

  • Java中为什么重写equals()也需要重写hashCode()?

    所有类默认继承Object类 先看一下Object源码 package java.lang; public class Object { //默认调用本地的hashcode()方法 根据内存地址生成hash值 避免不了哈希冲突 public native int hashCode(); //默认调用的equals方法比较的是’==’比较 //基本类型比较的是…

    Java 2023年4月25日
    00
  • Java三目运算符的实战案例

    Java三目运算符(也称为条件运算符)可以用来简化复杂的条件语句。它具有以下形式: (condition) ? expression1 : expression2; 其中,condition是一个布尔表达式,如果它的值为true,则返回expression1的值,否则返回expression2的值。 下面我将为你介绍两个实际应用场景的示例。 示例1:比较两个…

    Java 2023年5月26日
    00
  • java常用工具类 Date日期、Mail邮件工具类

    我来为您详细介绍一下 “Java常用工具类 Date日期、Mail邮件工具类” 的完整攻略。 Date日期工具类 1. 基本概念 Date日期工具类是Java中用于操作日期和时间的工具类,可以获取系统当前时间、将时间转换为指定格式、计算日期差等功能。 2. 常用方法 2.1 获取当前时间 通过Date()方法获取当前时间,代码如下: Date date = …

    Java 2023年5月20日
    00
  • java开发 线上问题排查命令详解

    Java开发 线上问题排查命令详解 在Java应用线上运行过程中可能会遇到各种问题,例如应用启动失败、性能瓶颈等等。本文将介绍一些常用的Java开发线上问题排查命令,帮助开发人员更快速、准确地定位问题。 查看应用状态 jps jps命令用于列出Java应用进程的PID(进程ID)和名称,可用于检查应用是否正常启动并在运行。 jps 输出示例: 1234 Ap…

    Java 2023年5月27日
    00
  • jdbc使用PreparedStatement批量插入数据的方法

    JDBC是Java连接数据库的标准API,它提供了访问不同数据库的接口,目前市场上主要的数据库有MySQL、Oracle、Microsoft SQL Server等。 批量插入(Batch Insert)是指将多条数据一次性写入数据库里,可以大大提高效率和减少数据库IO操作。 在JDBC中,使用PreparedStatement批量插入数据的方法如下: 准备…

    Java 2023年6月16日
    00
  • Struts2实现CRUD(增 删 改 查)功能实例代码

    实现CRUD(增删改查)功能是Web开发中最基本的功能之一,本文将详细讲解如何使用Struts2框架实现该功能。 步骤一:新建项目并引入依赖 首先,在Eclipse中新建一个动态Web项目,命名为:Struts2CRUD。接着,新增一个名为“lib”的文件夹,用于存放所需的Jar包。然后,将以下Jar包复制到该文件夹中: commons-lang3-x.x.…

    Java 2023年5月20日
    00
  • SpringBoot集成MyBatis的分页插件PageHelper实例代码

    下面就为大家详细讲解“SpringBoot集成MyBatis的分页插件PageHelper实例代码”的完整攻略。 简介 在使用 MyBatis 进行数据库操作时,MySQL主要的限制在于分页查询。但是 Mybatis 配合 PageHelper 便可以轻松解决这个问题。本文将介绍如何在 SpringBoot 中使用 MyBatis 分页插件 PageHelp…

    Java 2023年6月16日
    00
  • Spring Boot 简介(入门篇)

    SpringBoot简介(入门篇) 什么是SpringBoot Spring Boot 是一个用于快速创建 Spring 应用程序的框架。它基于 Spring 框架,遵循“约定优于配置”的原则,提供了很多默认配置,简化了 Spring 应用程序的开发过程。 SpringBoot的优点 快速开发: Spring Boot 可以快速创建独立运行的 Spring …

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