文件的上传与下载
创始人
2024-03-12 22:18:21
0

文章目录

  • 一、 实验目的:
  • 二、实验要求:
  • 三、实验内容:
    • 1、单文件上传
    • 2、多文件上传
    • 3、上传文件的大小限定
    • 4、实现文件的下载功能,并解决下载乱码问题


一、 实验目的:

掌握Servlet的HttpServletRequest对文件上传的支持;
能够理解文件上传的原理,掌握文件上传与下载的步骤

二、实验要求:

  1. 基于Servlet的文件上传。
  2. 文件的下载。
  3. 熟练使用MYEclipse开发

三、实验内容:

1、单文件上传

uploadHttpOne.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"  pageEncoding="utf-8"%>


HttpServletResquest对文件上传的支持


文件描述:
请选择文件:

UploadHttpOneServlst.java

package servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;@MultipartConfig(maxFileSize = 10 * 1024 * 1024)
@WebServlet("/uploadHttpOneServlst")
public class UploadHttpOneServlst extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();request.setCharacterEncoding("UTF-8");Part part = request.getPart("resPath");String filediscription = request.getParameter("filediscription");out.println("输入的文件描述:" + filediscription + "
");File uploadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));if (!uploadFileDir.exists()) {uploadFileDir.mkdir();}String oldName = MyUtil.getFileName(part);out.println("上传文件的原始名:" + oldName + "
");out.println("上传文件的大小:" + part.getSize() + "
");if (oldName != null) {part.write(uploadFileDir + File.separator + oldName);}out.println("文件上传到:" + uploadFileDir + File.separator + oldName + "
");} }

MyUtil.java

package servlet;import javax.servlet.http.Part;public class MyUtil {public static String getFileName(Part part) {if (part == null)return null;String fileName = part.getHeader("content-disposition");if (fileName.lastIndexOf("=") + 2 == fileName.length() - 1)return null;return fileName.substring(fileName.lastIndexOf("=") + 2, fileName.length() - 1);}
}

运行结果:
在这里插入图片描述
在这里插入图片描述

2、多文件上传

UploadHttpMultiServlst.java

package servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;@MultipartConfig
@WebServlet("/uploadHttpMultiServlst")
public class UploadHttpMultiServlst extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();request.setCharacterEncoding("UTF-8");String filediscription1 = request.getParameter("filediscription1");out.println("输入的文件1描述:" + filediscription1 + "
");String filediscription2 = request.getParameter("filediscription2");out.println("输入的文件2描述:" + filediscription2 + "
");File uploadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));if (!uploadFileDir.exists()) {uploadFileDir.mkdir();}Collection parts = request.getParts();for (Part part : parts) {if (part == null || !part.getName().contains("resPat")) {continue;}String oldName = MyUtil.getFileName(part);out.println("上传文件的原始名:" + oldName + "
");out.println("上传文件的大小:" + part.getSize() + "
");if (oldName != null) {part.write(uploadFileDir + File.separator + oldName);}out.println("文件上传到:" + uploadFileDir + File.separator + oldName + "
");}} }

MyUtil.java

package servlet;import javax.servlet.http.Part;public class MyUtil {public static String getFileName(Part part) {if (part == null)return null;String fileName = part.getHeader("content-disposition");if (fileName.lastIndexOf("=") + 2 == fileName.length() - 1)return null;return fileName.substring(fileName.lastIndexOf("=") + 2, fileName.length() - 1);}
}

UploadHttpMultiServlst.jsp

<%@ page contentType="text/html;charset=UTF-8" 
language="java" pageEncoding="utf-8" %>


HttpServletResquest对文件上传的支持


文件1描述:
请选择文件1:
文件2描述:
请选择文件2:

运行结果:
在这里插入图片描述
在这里插入图片描述

3、上传文件的大小限定

对多文件上传实例文件大小进行限定!
仅仅在UploadHttpMultiServlst.Java中加上限制条件——@MultipartConfig(maxFileSize = 10 * 1024 * 1024)//设置上传文件的最大值为10MB,其他代码不用变!
UploadHttpMultiServlst.Java

package servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;@MultipartConfig(maxFileSize = 10 * 1024 * 1024)//设置上传文件的最大值为10MB
@WebServlet("/uploadHttpMultiServlst")
public class UploadHttpMultiServlst extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();request.setCharacterEncoding("UTF-8");String filediscription1 = request.getParameter("filediscription1");out.println("输入的文件1描述:" + filediscription1 + "
");String filediscription2 = request.getParameter("filediscription2");out.println("输入的文件2描述:" + filediscription2 + "
");File uploadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));if (!uploadFileDir.exists()) {uploadFileDir.mkdir();}Collection parts = request.getParts();for (Part part : parts) {if (part == null || !part.getName().contains("resPat")) {continue;}String oldName = MyUtil.getFileName(part);out.println("上传文件的原始名:" + oldName + "
");out.println("上传文件的大小:" + part.getSize() + "
");if (oldName != null) {part.write(uploadFileDir + File.separator + oldName);}out.println("文件上传到:" + uploadFileDir + File.separator + oldName + "
");}} }

运行结果:
当其中一个文件大小大于10MB时,无法上传文件数据:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当文件小于10MB时,能够正常上传:
在这里插入图片描述
在这里插入图片描述

4、实现文件的下载功能,并解决下载乱码问题

实验代码和运行结果如下:
导包:在这里插入图片描述
ShowDownServlet.java

package servlet;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;@WebServlet("/showDownServlet")
public class ShowDownServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//指定从服务器uploadFiles目录中下载文件File downLoadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));//获得目录中的文件File[] list = downLoadFileDir.listFiles();request.setAttribute("fileList", list);RequestDispatcher dis = request.getRequestDispatcher("showInfo.jsp");dis.forward(request, response);}
}

MyUtil.java

package servlet;import javax.servlet.http.Part;
import java.io.UnsupportedEncodingException;public class MyUtil {public static String getFileName(Part part) {if (part == null)return null;String fileName = part.getHeader("content-disposition");if (fileName.lastIndexOf("=") + 2 == fileName.length() - 1)return null;return fileName.substring(fileName.lastIndexOf("=") + 2, fileName.length() - 1);}//处理乱码问题public static String toUTF8String(String str) {StringBuffer sb = new StringBuffer();int len = str.length();for (int i = 0; i < len; i++) {char c = str.charAt(i);if (c >= 0 && c <= 255) {sb.append(c);} else {byte b[];try {b = Character.toString(c).getBytes("UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();b = null;}for (int j = 0; j < b.length; j++) {int k = b[j];if (k < 0) {k &= 255;}sb.append("&" + Integer.toHexString(k).toUpperCase());}}}return sb.toString();}}

DownloadServlet.java

package servlet;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {File downLoadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));String aFileName = null;FileInputStream in = null;ServletOutputStream out = null;try {aFileName = request.getParameter("resPath");response.setHeader("Content-Type", "application/x-msdownload");response.setHeader("Content-Dissposition", "attachment;filename=" + MyUtil.toUTF8String(aFileName));in = new FileInputStream(downLoadFileDir + File.separator + aFileName);out = response.getOutputStream();out.flush();int aRead = 0;byte b[] = new byte[1024];while ((aRead = in.read(b)) != -1 & in != null) {out.write(b, 0, aRead);}out.flush();in.close();out.close();} catch (Throwable e) {e.printStackTrace();}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}

showInfo.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


显示下载文件


文件名称下载课件
${afile.name}下载

运行结果:
在这里插入图片描述

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...