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

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

“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页

基础教程推荐