【JavaWeb】文件的上传和下载

news2024/10/6 18:28:21

文章目录

  • 一.文件的上传介绍⭐️
    • 1.文件上传及HTTP协议的说明
    • 2.commons-fileupload.jar常用API介绍说明
  • 二.文件下载⭐️

一.文件的上传介绍⭐️

1.文件上传及HTTP协议的说明

(1).要有一个form标签,method=post请求
(2).form标签的encType属性值必须为multipart/form-data
(3).在form标签中使用input type=file添加上传的文件
(4).编写服务器代码接收(Servlet程序),处理上传数据

public class UploadServlet extends HttpServlet {


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       // System.out.println("文件上传过来了");
        //System.out.println(req.getParameter("username"));//--null
        ServletInputStream inputStream = req.getInputStream();
        byte[] buffer = new byte[1024000];
        int read =  inputStream.read(buffer);
        System.out.println(new String(buffer,0,read));
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
      <form action="http://localhost:8080/09_EL/uploadServlet" method="post" enctype="multipart/form-data">
          用户名: <input type="text" name="username" /></br>
          头像: <input type="file" name="photo" /></br>
          <input type="submit" value="上传" />
      </form>
</body>
</html>

在这里插入图片描述

2.commons-fileupload.jar常用API介绍说明

常用的类:

  • ServletFileUpload类,用于解析上传的数据.

  • FileItem类,表示每一个表单项

常用方法:

  • (1).判断当前上传的数据格式是否是多段的格式.
  • boolean ServletFileUpload.isMultipartContent(HttpServletRequest request);
  • (2).解析上传的数据
  • public List<FileItem> parseRequest(HttpServletRequest request);
  • (3).判断当前这个表单项,是否是普通的表单项
  • true表示普通的表单项,false表示上传的文件类型
  • boolean FileItem.isFormField();
  • (4).获取表单项的name属性值
  • String FileItem.getFileldName();
  • (5).获取当前表单项的值
  • String FileItem.getString();
  • (6).获取上传的文件名
  • String FileItem.getName();
  • (7).将上传的文件写到参数file所指向的硬盘位置
  • void FileItem.write(file);
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //1.判断上传的数据是否是多段数据(只有是多段的数据,才是文件上传的)
        if(ServletFileUpload.isMultipartContent(req)){
            //创建FileItemFactory工厂实现类
            FileItemFactory fileItemFactory = new DiskFileItemFactory();
            //创建用于解析上传数据的工具类 ServletFileUpload
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
            try {
                //解析上传的数据,得到每一个表单项FileItem
                List<FileItem> list = servletFileUpload.parseRequest(req);
                //循环判断,每一个表单项,是普通类型,还是上传的文件
                for(FileItem fileItem : list){
                    if(fileItem.isFormField()){
                        //普通表单项
                        System.out.println("表单项的name属性值: " + fileItem.getFieldName());
                        //参数UTF-8,解决乱码问题
                        System.out.println("表单项的value属性值: " + fileItem.getString("UTF-8"));
                    }else{
                        //上传的文件
                        System.out.println("表单项的name属性值: " + fileItem.getFieldName());
                        System.out.println("上传的文件名: " + fileItem.getName());

                        fileItem.write(new File("D:\\" + fileItem.getName()));
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
<body>
      <form action="http://localhost:8080/09_EL/uploadServlet" method="post" enctype="multipart/form-data">
          用户名: <input type="text" name="username" /></br>
          头像: <input type="file" name="photo" /></br>
          <input type="submit" value="上传" />
      </form>
</body>

二.文件下载⭐️

在这里插入图片描述

 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取要下载的文件名
        String downloadFileName = "pic-02.png";
        //2.读取要下载的文件内容(通过ServletContext对象可以读取)
        ServletContext servletContext = getServletContext();
        InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downloadFileName);
        //3.在回传前,通过响应头告诉客户端返回的数据类型
        //获取要下载的文件类型
        String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
        System.out.println("下载的文件类型:" + mimeType);
        resp.setContentType(mimeType);
        //4.在回传前,通过响应头告诉客户端收到的数据是用于下载使用
        //Content-Disposition响应头,表示收到的数据怎么处理
        //attachment表示附件,表示下载使用
        //filename= 表示指定下载的文件名
        resp.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode("中国.png","UTF-8"));
        //resp.setHeader("Content-Disposition","attachment;filename=22.png");
        //5.把读取的文件内容回传给客户端
        //获取响应的输出流
        ServletOutputStream outputStream = resp.getOutputStream();
        //读取输入流中的全部数据,复制给输出流,输出给客户端
        IOUtils.copy(resourceAsStream,outputStream);
    }

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

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

相关文章

VTK在Windows上的安装

本章介绍在计算机系统上安装VTK。在Microsoft Windows上&#xff0c;可以安装预编译的vtk.exe&#xff0c;也可以从源码自行编译vtk软件。您可能希望了解系统架构&#xff0c;阅读会使编译过程更容易跟踪。如果遇到问题&#xff0c;可以联系vtkusers邮件列表。 2.1 概述 VTK在…

【HTML + CSS】笔记

页面设计 1.HTML&#xff1a;结构框架 2.CSS 3.JS HTML&#xff1a;超文本标记语言 <...>&#xff1a;标签/元素 <!DOCTYPE html>&#xff1a;解释文档类型为html head区域常用标签 <base> 使用后浏览器不再使用当前文档的URL&#xff0c;而使用指定的…

web前端设计与开发期末作品/期末大作业-疫情

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业&#xff0c;击疫情致敬逆行者感人类题材 | 致敬逆行者网页设计作品 | 大学生抗疫感动专题网页设计作业模板 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a…

Windows之应用安装程序 —— winget

大家都用过Linux中的应用程序安装工具&#xff0c;如yum、apt、rpm等工具进行安装自己想要的一些工具或则软件之类的&#xff0c;当然Linux操作系统还是很强大的有很多类似的命令来安装我们所需要的程序&#xff0c;但是windwos有没有类似于windows这样的应用安装程序呢&#x…

可解释的AI:用LIME解释扑克游戏

可解释的AI&#xff08;XAI&#xff09;一直是人们研究的一个方向&#xff0c;在这篇文章中&#xff0c;我们将看到如何使用LIME来解释一个模型是如何学习扑克规则的。在这个过程中&#xff0c;我们将介绍: 如何将LIME应用到扑克游戏中;LIME如何工作;LIME 的优点和缺点是什么。…

免费查题系统搭建

免费查题系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

STM32存储器组织-STM32存储器映像-嵌入式SRAM-STM32位段-嵌入式闪存-STM32启动配置

STM使用说明第二篇【1】STM32存储器组织【2】STM32存储器映像【3】嵌入式SRAM【4】STM32位段【5】嵌入式闪存【6】STM32启动配置【1】STM32存储器组织 程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。 数据字节以小端格式存放在存储器中。一…

【Java】IO流 - 节点流和处理流【Buffered】

文章目录节点流和处理流BufferedReaderBufferedWriterBufferd拷贝BufferedInputStream/BufferedOutputStream节点流和处理流 数据源就是存放数据的地方&#xff0c;可以是 文件、数组 等等&#xff1b; 节点流是比较底层的&#xff0c;直接操作二进制数据 包装流&#xff08;处…

石英砂过滤器 多介质过滤器 活性炭过滤器

石英砂过滤器简介 石英砂过滤器属于机械过滤器的一种为压力式过滤器&#xff0c;采用ABS蘑菇型水帽布水&#xff0c;内装若干种规格精制石英砂滤料&#xff0c;阻力小&#xff0c;通量大。利用过滤器内所装的填料来截留去除水中悬浮微粒和胶体杂质。当过滤器因滤层污脏&#x…

解决git配置多个SSH公钥的问题

项目场景&#xff1a; 之前跟同事共用一个项目私密仓库&#xff0c;现需拆分成两个仓库&#xff0c;结果同事提出他不想换&#xff0c;让我这边再创建一个新仓库。 那么接下来就遇到一个情况&#xff0c;原来仓库的公钥我并不想删除&#xff0c;还想继续使用&#xff0c…

Ubuntu20.04沉浸式装机

Ubuntu20.04沉浸式装机 文章目录Ubuntu20.04沉浸式装机前言1.装机之后系统更新&#xff0c;设置软件源2.安装系统驱动Notice3 安装CUDA及CuDNN4 常用软件安装4.1 常用软件安装4.2 Typora安装4.3 docker安装4.4 nvidia-docker 安装4.5 pypcd 安装4.6 PCL安装环境安装4.7 Eigen安…

Python学习基础笔记七——元组

元组tuple&#xff0c;跟列表相似&#xff0c;元组不能在原处修改。元组不支持任何方法调用&#xff0c;但是元组具有列表的大多数属性。 但是要记住的是&#xff1a;元组的不可变性只适用于元组本身&#xff0c;并非其内容。例如元组内部的列表是可以像往常一样修改的。 元组常…

Go1.20 arena新特性示例详解

当时我们还想着 Go 团队应该不会接纳&#xff0c;至少不会那么快&#xff1a; 懒得翻也可以看我再次道来&#xff0c;本文提到的提案《proposal: arena: new package providing memory arenas》&#xff0c;这其中的 Arena 将会是一个突破项。 快速背景 Arena 指的是一种从一个…

Java接口的应用

目标&#xff1a;总结Comparable接口以及compareTo方法、comparator接口中compare方法比较器、toString方法、equals方法、hashCode方法、Cloneable接口以及深浅拷贝 比较对象中内容的大小【Comparable接口以及compareTo方法】 例如&#xff1a;学生类&#xff1a;成员有姓名、…

计算机网络4小时速成:数据链路层,功能,封装成帧,透明传输,差错控制,PPP协议,广播信道,以太网,MAC层,设备

计算机网络4小时速成&#xff1a;数据链路层&#xff0c;功能&#xff0c;封装成帧&#xff0c;透明传输&#xff0c;差错控制&#xff0c;PPP协议&#xff0c;广播信道&#xff0c;以太网&#xff0c;MAC层&#xff0c;设备 2022找工作是学历、能力和运气的超强结合体&#x…

Linux C/C++ 学习笔记(四):MYSQL安装与远程连接

问题及解决 对配置文件中绑定的IP地址进行修改 通过Mysql workbench连接MySQL数据库时出现错误 需要对mysq的配置文件进行修改&#xff0c;配置文件是/etc/mysql下的my.cnf 绑定的地址是一个回环地址&#xff0c;不能对外使用 将其修改为0.0.0.0。 0.0.0.0不是一个真正意义…

MySQL主从数据库(主读从写)

MySQL多数据源MySQL主从数据库&#xff08;主读从写&#xff09;1. 多数据源的实现原理1.1 配置多数据源yml文件1.2 创建配置类1.3 动态切换数据源类继承AbstractRoutingDataSource 类1.4 测试类测试1.5 附枚举代码1.6 总结2. 多数据源切换方式&#xff08;优化&#xff09;2.1…

HTML做一个简单漂亮的宠物网页(纯html代码) 带视频 带音乐 带报告

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 宠物网页设计 | 保护动物网页 | 鲸鱼海豚主题 | 保护大象 | 等网站的设计与制作 | HTML宠物网页设计 | HTML期末大学生网页设计作业 HTML&#xff1a;…

酒水推荐商城|基于Springboot实现酒水商城系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

FLP、CAP和BASE

FLP不可能原理 FLP定理 FLP Impossibility&#xff08;FLP 不可能性&#xff09;是分布式领域中一个非常著名的定理&#xff0c;定理的论文是由 Fischer, Lynch and Patterson 三位作者于1985年发表 It is impossible to have a deterministic protocol that solves consens…