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日

相关文章

  • MyBatis 超详细讲解动态SQL的实现

    MyBatis 超详细讲解动态SQL的实现 什么是动态SQL 在SQL语句中,如果能在语句执行前根据不同的条件去动态生成不同的SQL语句,就叫做动态SQL。 动态SQL的优势 动态SQL相较于拼接字符串与使用PreparedStatement的SQL语句拼接方式,具有以下优势: 可以根据条件进行SQL语句的动态生成,使得开发工作更为高效、方便。 可以避免SQ…

    Java 2023年5月19日
    00
  • JSP 中Servlet的自己实现

    JSP 中Servlet的自己实现 Servlet是Java中常用的服务器端程序,可以接收和处理HTTP请求,并返回相应的 HTTP响应。JSP(Java Server Pages) 是一个动态的Java web页面技术,可以在网页中嵌入 Java 代码片段,用于生成动态内容。 在JSP中使用Servlet,通常有两种方式:一是在JSP页面中直接使用标签引入…

    Java 2023年6月15日
    00
  • mybatis自动填充时间字段示例代码

    为了实现 mybatis 自动填充时间字段的功能,需要在实体类中加入 createTime 和 updateTime 字段,并使用注解 @TableField(fill = FieldFill.INSERT) 标记 createTime 字段,在新增时自动填入当前时间,使用注解 @TableField(fill = FieldFill.INSERT_UPDA…

    Java 2023年5月20日
    00
  • Java Servlet输出中文乱码问题解决方案

    针对“Java Servlet输出中文乱码问题解决方案”,我来给你一个完整的攻略。具体步骤如下: 1. 设置请求和响应的编码方式 在Servlet中,我们需要设置请求和响应的编码方式为utf-8,即: request.setCharacterEncoding("utf-8"); // 设置请求编码方式为utf-8 response.set…

    Java 2023年5月20日
    00
  • 关于Java for循环的正确用法介绍

    关于Java for循环的正确用法介绍 循环是Java中非常重要的一种语句。for循环是循环语句中最为常用和灵活的一种,它可以重复执行一段代码,在Java语言中,for循环的语法格式如下: for (初始化表达式; 布尔表达式; 更新表达式) { // 循环体 } 初始化表达式:初始化表达式在循环开始前执行,而且只会执行一次。这里我们一般做循环变量的初始化操…

    Java 2023年5月26日
    00
  • 基于Spring-Security自定义登陆错误提示信息

    基于Spring-Security自定义登陆错误提示信息的完整攻略如下: 第一步:添加Spring-Security依赖 我们需要在Maven或者Gradle项目中添加Spring-Security依赖,在pom.xml或build.gradle中添加相应的依赖配置,例如: <dependency> <groupId>org.spri…

    Java 2023年5月20日
    00
  • 详解java中的Collections类

    详解Java中的Collections类 Collections类是Java集合框架中的一个工具类,用于对集合进行各种操作,例如排序、查找、替换等。 排序 sort方法 sort方法可以对List集合中的元素进行排序操作。它可以按照升序或降序的方式进行排序。 List<Integer> list = new ArrayList<>(A…

    Java 2023年5月26日
    00
  • 关于Java的ArrayList数组自动扩容机制

    关于Java的ArrayList数组自动扩容机制,一般我们可以从两个角度来讲解:实际使用场景和内部实现原理。 实际使用场景 在我们实际开发中,ArrayList是一个非常常用的数据结构。它具有动态扩容的特性,因此可以根据实际使用情况自动调整大小。这在许多场景中非常实用,例如需要存储大量数据的情况,或者需要频繁进行插入、删除操作的情况。下面是两个常见的示例说明…

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