文件的上传与下载

news2025/1/8 20:57:20

文章目录

  • 一、 实验目的:
  • 二、实验要求:
  • 三、实验内容:
    • 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"%>
<!DOCTYPE html>
<html>
<head>
    <title>HttpServletResquest对文件上传的支持</title>
    <meta charset="UTF-8">
</head>
<body>
<form action="uploadHttpOneServlst" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td>文件描述:</td>
            <td><input type="text" name="filediscription"></td>
        </tr>
        <tr>
            <td>请选择文件:</td>
            <td><input type="file" name="resPath"></td>

        </tr>
        <tr>
            <td align="right"><input type="reset" value="重填"></td>
            <td><input type="submit" value="上传"></td>
        </tr>
    </table>
</form>
</body>
</html>

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 + "<br/>");
        File uploadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));
        if (!uploadFileDir.exists()) {
            uploadFileDir.mkdir();
        }
        String oldName = MyUtil.getFileName(part);
        out.println("上传文件的原始名:" + oldName + "<br/>");
        out.println("上传文件的大小:" + part.getSize() + "<br/>");
        if (oldName != null) {
            part.write(uploadFileDir + File.separator + oldName);
        }
        out.println("文件上传到:" + uploadFileDir + File.separator + oldName + "<br/>");
    }
}

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 + "<br/>");
        String filediscription2 = request.getParameter("filediscription2");
        out.println("输入的文件2描述:" + filediscription2 + "<br/>");
        File uploadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));
        if (!uploadFileDir.exists()) {
            uploadFileDir.mkdir();
        }
        Collection<Part> parts = request.getParts();
        for (Part part : parts) {
            if (part == null || !part.getName().contains("resPat")) {
                continue;
            }
            String oldName = MyUtil.getFileName(part);
            out.println("上传文件的原始名:" + oldName + "<br/>");
            out.println("上传文件的大小:" + part.getSize() + "<br/>");
            if (oldName != null) {
                part.write(uploadFileDir + File.separator + oldName);
            }
            out.println("文件上传到:" + uploadFileDir + File.separator + oldName + "<br/>");
        }
    }
}

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" %>
<!DOCTYPE html>
<html>
<head>
    <title>HttpServletResquest对文件上传的支持</title>
    <meta charset="UTF-8">
</head>
<body>
<form action="uploadHttpMultiServlst" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td>文件1描述:</td>
            <td><input type="text" name="filediscription1"></td>
        </tr>
        <tr>
            <td>请选择文件1</td>
            <td><input type="file" name="resPath1"></td>

        </tr>
        <tr>
            <td>文件2描述:</td>
            <td><input type="text" name="filediscription2"></td>
        </tr>
        <tr>
            <td>请选择文件2</td>
            <td><input type="file" name="resPath2"></td>

        </tr>
        <tr>
            <td align="right"><input type="reset" value="重填"></td>
            <td><input type="submit" value="上传"></td>
        </tr>
    </table>
</form>
</body>
</html>

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

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 + "<br/>");
        String filediscription2 = request.getParameter("filediscription2");
        out.println("输入的文件2描述:" + filediscription2 + "<br/>");
        File uploadFileDir = new File(getServletContext().getRealPath("/uploadFiles"));
        if (!uploadFileDir.exists()) {
            uploadFileDir.mkdir();
        }
        Collection<Part> parts = request.getParts();
        for (Part part : parts) {
            if (part == null || !part.getName().contains("resPat")) {
                continue;
            }
            String oldName = MyUtil.getFileName(part);
            out.println("上传文件的原始名:" + oldName + "<br/>");
            out.println("上传文件的大小:" + part.getSize() + "<br/>");
            if (oldName != null) {
                part.write(uploadFileDir + File.separator + oldName);
            }
            out.println("文件上传到:" + uploadFileDir + File.separator + oldName + "<br/>");
        }
    }
}

运行结果:
当其中一个文件大小大于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" %>
<!DOCTYPE html>
<html>
<head>
    <title>显示下载文件</title>
    <meta charset="UTF-8">
</head>
<body>
<form action="uploadHttpMultiServlst" method="post" enctype="multipart/form-data">
    <table border="1">
        <tr bgcolor="#90ee90">
            <th>文件名称</th>
            <th>下载课件</th>
        </tr>
        <c:forEach var="afile" items="${fileList}">
            <tr>
                <td>${afile.name}</td>
                <td align="center"><a href="downloadServlet?resPath=${afile.name}"
                                      style="text-decoration: yellow">下载</a></td>
            </tr>
        </c:forEach>
    </table>
</form>
</body>
</html>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内存管理---分页机制

目录 物理内存管理带来的问题 直接映射 一级页表 二级页表 参考&#xff1a; &#xff08;C语言内存七&#xff09;分页机制究竟是如何实现的&#xff1f; - Smah - 博客园 物理内存管理带来的问题 比如4GB的flash, 如果应用程序可直接访问物理内存&#xff0c;那么可能一个…

云小课|基于华为云WAF的日志运维分析,构筑设备安全的城墙

阅识风云是华为云信息大咖&#xff0c;擅长将复杂信息多元化呈现&#xff0c;其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要&#xff1a;云日志服务用于收集来自主机和云服务的日志数据&#x…

windows安装docker版青龙面板

1.下载docker Docker Desktop 官方下载地址&#xff1a; windows docker 2 管理员运行PowerShell&#xff0c;执行下面的命令(Hyper-V 和容器特性) Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All3.运行第一步下载好的exe 双击下载的 Docker fo…

springboot基于vue.js的掌上博客系统的设计与实现毕业设计源码063131

Springboot掌上博客系统的设计与实现 摘 要 掌上博客系统是当今网络的热点&#xff0c;博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体&#xff0c;Blog站点所形成的网状结构促成了不同于以往社区的Blog文化&#xff0c;Blog技术缔造了“博客”文化。 本文课…

恶补了 Python 装饰器的八种写法,你随便问~

对于每一个学习 Python 的同学&#xff0c;想必对 符号一定不陌生了&#xff0c;正如你所知&#xff0c; 符号是装饰器的语法糖&#xff0c;符号后面的函数就是我们本文的主角&#xff1a;装饰器。 装饰器放在一个函数开始定义的地方&#xff0c;它就像一顶帽子一样戴在这个…

Java---File详解

目录 一、File的概述 二、File的创建 三、File的常见成员方法 1&#xff1a;判断和获取 2&#xff1a;创建和删除 &#xff08;1&#xff09;createNewFile() &#xff08;2&#xff09;mkdir() &#xff08;3&#xff09;delete&#xff08;&#xff09; 3&#xff1a…

高新技术企业认定条件

主要是评估企业的以下几个条件&#xff1a; 一是企业成立满一年以上&#xff0c;并且符合高企八大领域&#xff1b; 二是拥有核心自主知识产权&#xff0c;并且近一年高新产品的收入啊&#xff0c;需要占总收入的60%以上&#xff1b; 三是科技人员占当年职工总数的比例不低于…

mybatis学习:四、关联查询、缓存

7. 关联查询 7.1 准备工作: 数据库表: #订单表&#xff1a; create table tb_order (id INT AUTO_INCREMENT PRIMARY KEY,userid INT,createtime DATETIME,state VARCHAR(20) ) ENGINEInnoDB AUTO_INCREMENT1;#订单详情表 CREATE TABLE tb_orderdetail(…

[附源码]Python计算机毕业设计SSM酒店式公寓服务系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[LeetCode 1769]移动所有球到每个盒子所需的最小操作数

题目描述 题目链接&#xff1a;[LeetCode 1769]移动所有球到每个盒子所需的最小操作数 有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[i] 的值为 ‘0’ 表示第 i 个盒子是 空 的&#xff0c;而 boxes[i] 的值为 ‘1’ 表示盒子里有 一个 小球。…

Gradle简单配置

写在前面&#xff1a;一开始配置gradle的时候&#xff0c;最好不要把他maven仓库配置在一起&#xff0c;前段时间配置公司项目身心俱疲。大部分公司里面用gradle都是配置的自己的仓库地址&#xff0c;所以有的东西就不要和网上的配置保持一致了&#xff0c;比如说这个仓库地址。…

网站都变成灰色了,它是怎么实现的?

大家好&#xff0c;我是二哥呀。 想必大家都感受到了&#xff0c;很多网站、APP 在昨天都变灰了。 先来感受一下变灰后的效果。 这种灰色的效果怎么实现的呢&#xff1f;如何做到图片、文字、按钮都变灰的效果呢&#xff1f; 方案 1&#xff0c;换一套灰色的 UI&#xff0c;…

Github限时开源24小时,Alibaba架构师内部最新发布SpringCloud开发手册

前言 微服务是SOA之后越来越流行的体系结构模式之一&#xff01; 如果您关注行业趋势&#xff0c;就会发现,如今商业机构不再像几年前那样&#xff0c;开发大型应用程序&#xff0c;来管理端到端之间的业务功能&#xff0c;而是选择快速灵活的微服务。 ​ 通过微服务&#x…

Unity 之 后处理实现界面灰度效果(PostProcessing实现 | Shader实现)

Unity 之 后处理实现界面灰度效果前言一&#xff0c;Post Processing1.1 设置组件1.2 代码控制二&#xff0c;Shader材质实现2.1 原理API2.2 编写Shader2.3 编写代码2.4 实现效果效果展示前言 在Unity中实现后处理效果有两种方式&#xff1a;一种是通过使用Unity官方提供的Pos…

H3C AC三层组网架构,AP自动上线自动固化

核心交换机: [HX]dis cu [HX]dis current-configuration version 7.1.075, Alpha 7571 sysname HX irf mac-address persistent timer irf auto-update enable undo irf link-delay irf member 1 priority 1 dhcp enable lldp global enable system-working-mode standard xbar…

[附源码]计算机毕业设计仓库管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C#连接MySql数据库

C#连接MySql数据库 具体步骤如下 第一步&#xff1a;提前将mysql服务打开&#xff0c;用xampp的需要将Mysql服务开启&#xff1b; 第二步&#xff1a;新建一个C#项目 第三步&#xff1a;在项目中下载&#xff1a;MySql.Data的NuGet&#xff0c;作者为Oracle&#xff1b; 第四布…

免息配资天宇优配|世界杯与A股有何关系?券商这样分析!

世界杯与A股有何联系&#xff1f; 卡塔尔世界杯开幕近两周&#xff0c;世界各地球迷热切关注。与此一起&#xff0c;不少金融机构“频频出镜”&#xff0c;多家券商发布了世界杯相关论题研究报告&#xff0c;讨论“世界杯效应”是否存在、世界杯期间是否利好大消费板块等论题。…

代码随想录刷题|LeetCode 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

目录 309.最佳买卖股票时机含冷冻期 思路 1、确定dp数组以及下标含义 2、确定递推公式 3、初始化 4、遍历顺序 5、获取结果 最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 思路 买卖股票的最佳时机含手续费 309.最佳买卖股票时机含冷冻期 题目链接&#xff1a;力扣…

Kafka的存储机制和可靠性

Kafka存储机制前言一、Kafka 存储选择二、Kafka 存储方案剖析三、Kafka 存储架构设计四、Kafka 日志系统架构设计4.1、Kafka日志目录布局4.2、Kafka磁盘数据存储五、Kafka 可靠性5.1、Producer的可靠性保证5.1.1、kafka 配置为 CP(Consistency & Partition tolerance)系统5…