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

“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 mybatis框架配置详解

    Java MyBatis框架配置详解 1. 简介 MyBatis是一个用Java编写的开源ORM(object relational mapping)框架。它通过XML或注解方式向数据库发送SQL语句,执行相应的操作,并将结果映射到Java对象中。 MyBatis具有以下优点: 灵活性较高,可以使用纯SQL,减少了ORM框架带来的性能压力。 可以进行批处理,…

    Java 2023年5月20日
    00
  • JavaWeb登录界面登录失败在同一页面进行提示的解决

    JavaWeb登录界面登录失败在同一页面进行提示的解决 当用户在JavaWeb应用程序中的登录界面输入错误的用户名或密码时,我们需要给与用户提示以完成用户友好体验。该过程有多种方法可以完成,其中一种方法是在同一页面上进行提示。本文将讲解如何在同一页面上显示登录失败的提示信息。 第一步:页面设计我们需要在登录页面添加一个div元素,将错误信息放在里面。但是在一…

    Java 2023年6月15日
    00
  • Java基础教程之八大基本数据类型

    Java基础教程之八大基本数据类型 在Java中,基本数据类型指的是不同类型的数据的原始值,它们是Java程序设计的基础。Java中有八种基本数据类型,分别是: byte:8位有符号整数,取值范围为-128到127; short:16位有符号整数,取值范围为-32768到32767; int:32位有符号整数,取值范围为-2147483648到2147483…

    Java 2023年5月26日
    00
  • SpringBoot 导出数据生成excel文件返回方式

    准备工作 首先,我们需要在项目的依赖文件中添加对poi-ooxml的依赖,这样我们才能够在Java中读写Excel文件。 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <ver…

    Java 2023年5月19日
    00
  • Java ORM的作用是什么?

    Java ORM(Object-Relational Mapping)是一种将对象和关系型数据库映射起来实现数据持久化的技术。ORM框架使得开发人员能够使用对象来访问和操作数据库,而不用关注底层的SQL语句和数据库操作细节,从而提高了开发效率和代码质量。 ORM的作用主要有以下几点: 简化数据库操作:ORM框架提供了ORM映射机制,可以将Java对象映射到数…

    Java 2023年5月11日
    00
  • java实现任意四则运算表达式求值算法

    实现任意四则运算表达式求值的算法,需要进行以下几个步骤: 词法分析:把表达式转化为一个个由运算符、操作数和括号组成的单词。 语法分析:根据单词列表构建语法树。 求值:根据语法树,对表达式进行求值计算。 接下来我们将详细讲解如何实现这些步骤。 1. 词法分析 词法分析将表达式转换为单词列表。单词包括运算符,操作数和括号。我们可以利用正则表达式对表达式进行拆分。…

    Java 2023年5月19日
    00
  • 什么是运行时异常?

    运行时异常指在程序运行过程中,由于程序逻辑错误或者环境条件异常等原因,导致程序抛出的异常。与编译时异常不同的是,运行时异常不需要在代码中显示地声明或捕获,而是在程序运行时动态地抛出和处理。 常见的运行时异常包括:空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、类型转换异…

    Java 2023年4月27日
    00
  • 浅谈JavaScript字符串拼接

    下面是关于JavaScript字符串拼接的完整攻略。 什么是JavaScript字符串拼接 字符串拼接是指将多个字符串连接成一个字符串的过程,这在JavaScript中是一项很常见的操作。在实际开发中,我们经常需要从不同的字符串片段中构建出我们需要的完整字符串,比如构建URL字符串、HTML字符串等。 如何使用JavaScript字符串拼接 使用加号拼接字符…

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