IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【JavaWeb】Servlet实现上传和下载文件的功能 -> 正文阅读

[开发工具]【JavaWeb】Servlet实现上传和下载文件的功能

一、上传功能

jsp页面

步骤:

文件上传
1.准备表单
2.设置表单的提交类型为POST请求 method=“post”
3.设置表单类型为文件上传表单 enctype=“multipart/form-data”
4.设置文件提交的地址
5.准备表单元素(1.普通的表单项 type=“text”;2.文件项 type=“file”)
6.设置表单元素的name属性值(表单提交一定要设置表单的name属性值,否则后台无法接收数据!)

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data" action="uploadServlet">
        姓名:<input type="text" name="uname"> <br>
        文件:<input type="file" name="myfile"> <br>
        <!-- button默认的类型是提交类型 type="submit" -->
        <button>提交</button>
    </form>
</body>
</html>

Servlet的方法实现

简要步骤:

文件上传

  • 使用注解@MultipartConfig将一个 Servlet 标识为支持文件上传
  • Servlet 将 multipart/form-data 的 POST请求封装成Part对象, 通过Part对上传的文件进行操作
@WebServlet("/uploadServlet")
@MultipartConfig //如果是文件上传,必须要设置该注解!
public class UploadServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("文件上传...");
        //设置请求的编码格式
        req.setCharacterEncoding("UTF-8");
        //获取普通表单项(获取参数)
        String uname = req.getParameter("uname"); //表单中表单元素的name属性值
        System.out.println("uname: " + uname);

        //获取Part对象 (Servlet 将 mutipart/form-data 的 POST 请求封装成 Part对象)
        Part part = req.getPart("myfile");
        //通过Part对象得到上传的文件名
        String fileName = part.getSubmittedFileName();
        System.out.println("上传文件名:" + fileName);
        //得到文件存放的路径
        String filePath = req.getServletContext().getRealPath("/");
        System.out.println("文件存放路径:" + filePath);
        //上传文件到指定目录
        part.write(filePath + "/" + fileName);
    }
}

二、下载功能的实现

准备下载文件夹以及相关设置

在项目的工程目录下新建一个存放可供下载文件的文件夹,并准备好相关可供下载文件:
在这里插入图片描述
这时再把刚刚新建的文件夹添加到服务器的外部资源设置中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

jsp页面

简要说明:

超链接下载

  • 当使用超链接(a标签)时,如果遇到浏览器能识别的资源,则显示内容;
  • 若是无法识别,则会进行下载。

download属性

  • 通过download属性规定浏览器进行下载
  • download属性可以不写任何信息,会自动默认使用文件名
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件下载</title>
</head>
<body>
    <!-- 浏览器能够识别的资源-->
    <a href="download/hello.txt">文本文件</a>
    <a href="download/pic.jpg">图片文件</a>
    <!-- 浏览器不能够识别的资源-->
    <a href="download/zzz.rar">压缩文件</a>
    <hr>
    <a href="download/hello.txt" download>文本文件</a>
    <a href="download/pic.jpg" download="test.png">图片文件</a>

    <hr>
    <form action="downloadServlet">
        文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名">
        <button>下载</button>
    </form>
</body>
</html>

Servlet的方法实现

核心步骤概要说明:

文件下载

  1. 需要通过resp.setContentType 方法设置Content-type的值,为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如“application/octet-stream”
  2. 需要通过 resp.setHeader 方法设置Content-Disposition 头的值 为“attachment;filename=文件名”
  3. 读取下载文件,调用response.getOutputStream 方法向客户端写入附件内容。
@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("文件下载...");

        //设置请求编码格式
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        //获取参数  (得到要下载的文件名)
        String fileName = req.getParameter("fileName");
        //参数的非空判断  trim:去除字符串的前后空格
        if(fileName == null || "".equals(fileName.trim())){
            resp.getWriter().write("请输入要下载的文件名!");
            resp.getWriter().close();
            return;
        }
        //得到图片存放的路径
        String Path = req.getServletContext().getRealPath("/download/");
        //通过路径得到file对象
        File file = new File(Path+fileName);
        //判断文件对象是否存在并且是否为标准文件
        if(file.exists() && file.isFile()){
            //设置响应类型(浏览器无法使用某种方式或激活某个程序来处理的MIME类型)
            resp.setContentType("application/octet-stream");
            //设置响应头信息
            resp.setHeader("Content-Disposition","attachment;filename=" + fileName);
            //得到file文件的输入流
            InputStream in = new FileInputStream(file);
            //得到字节输出流
            ServletOutputStream out = resp.getOutputStream();
            //定义byte数组
            byte[] bytes = new byte[1024];
            //定义长度
            int len =0;
            //循环输出
            while((len = in.read(bytes))!= -1){
                //输出
                out.write(bytes,0,len);
            }

            //关闭资源
            out.close();
            in.close();

        }else{
            resp.getWriter().write("文件不存在,请重试!");
            resp.getWriter().close();
        }
    }
}

源码提供

页面展示

页面都很简单,单纯只是为了功能测试。
1.开始页面
在这里插入图片描述

2.上传页面
在这里插入图片描述

3.下载页面
在这里插入图片描述

工程文件提供

【JavaWeb】Servlet实现文件的上传和下载功能

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:24:24  更:2022-03-17 22:24:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:24:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码