response实现文件下载(java)

2023-11-19

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

public class FileServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      (1) 要获取下载文件的路径
        String realPath="E:\\D\\Codes\\javaweb\\smbms\\servlet-01\\target\\classes\\test.jpg";
//        String realPath = this.getServletContext().getRealPath("/test.jpg");
        // 从当前项目中找test.jpg
//     (2) 下载的文件名是啥
        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
        //从最后一个 “/ ” 开始查找文件名
//     (3)让 浏览器支持下载, 设置支持 中文文件名
        resp.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(fileName,"UTF-8"));
//     (4)获取下载文件的输入流
        FileInputStream in = new FileInputStream(realPath);
//     (5)创建缓冲区
        int len=0;
        byte[] buffer = new byte[1024];

//     (6) 获取OutPutStream对象
        ServletOutputStream out = resp.getOutputStream();
//     (7)将FileOutPutStream 流写入到buffer缓冲区
        while ((len = in.read(buffer))>0){
            out.write(buffer ,0,len);
        }
//     (8) 使用 OutPutStream 将缓冲区的数据输出到客户端
//        (9)关闭流
        in.close();
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

配置


    <servlet>
        <servlet-name>file</servlet-name>
        <servlet-class>FileServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>file</servlet-name>
        <url-pattern>/filedown</url-pattern>
    </servlet-mapping>

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

response实现文件下载(java) 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • vue之babel自动埋点

    公司项目是vue单页面技术 这天组长对我说 为了凸显我们的作用 做点外行或者新手看起来高深的东西 例如自动埋点 当时我的表情先是 然后摸鱼摸习惯了 就是这种状态 最后组长说领导的态度决定我们的绩效 没办法 为了money 无奈打开了老朋友
  • nacos集群部署遇到的问题总结

    问题一 内存不足 问题描述 nacos is starting with cluster Error occurred during initialization of VM Could not reserve enough space f
  • Eclipse android apk打包

    Eclipse android 开发更改apk名字 有以下几步 第一步 修改工程包名 在eclipse里 找到项目包和java包 原则上都一样 就可以按 F2 修改名字 随之 源 java也会得到相应的修改 然而每个 java文件都需要把如
  • Fortify 代码扫描安装使用教程

    前言 Fortify 能够提供静态和动态应用程序安全测试技术 以及运行时应用程序监控和保护功能 为实现高效安全监测 Fortify具有源代码安全分析 可精准定位漏洞产生的路径 以及具有1分钟1万行的扫描速度 Fortify SCA 支持丰富
  • 现在投资创客教育

    很多人会问创客要不要投资 就像吃西红柿鸡蛋面要不要用刀叉一样 你当然可以用 也可以用筷子 格物斯坦表示如果没有筷子 喜欢用手抓着吃也是可以的啊 投资人是路径的一种 不是唯一 更不是全部 投资创客教育是教育培训行业比较热门的话题 该行业未来是
  • Python基础语法学习之变量与赋值

    近几年Python飞速发展 开始学习Python的人群不在仅仅局限于编程开发者 许多其他行业的从业者也开始将Python作为自己的职业技能 本文仍然是针对零基础的初学者 继续学习Python的基础语法 变量与赋值 主要内容包括变量和赋值的概
  • el-checkbox-group限制勾选数量

  • 代理模式:静态代理和动态代理

    代理模式 代理对象增强对目标对象的功能 分类 静态代理 动态代理 jdk代理通过实现接口 cglib通过实现类实现 静态代理 JDK动态代理 CGLIB代理模式 通过回调拦截器方法实现代理对象的生成
  • 【计算机视觉】直接线性变换(DLT)求解P矩阵(2 使用SVD分解)(附MATLAB代码)

    引言 之前的帖子已经完成了一种计算直接线性变换的方法 是直接通过矩阵运算来进行的 不过随后得到的结果并不能满足精度要求 如果只是用来作为迭代优化的一个初值的话 对于精度的要求倒也不用那么高 但在查阅资料时又发现了另一种解法 是通过SVD分解
  • DataFrame对象创建

    文章目录 前言 一 创建DataFrame对象 二 使用步骤 前言 一 创建DataFrame对象 示例 将字典 年龄 23 22 21 岗位 客服 运营 公关 年购买量 10 15 8 转换成一个DataFrame对象 二 使用步骤 代码
  • 搭建主数据管理平台,解决多个系统数据不统一的问题

    如今的电子产业环境要求电子制造商必须能对产业中的各种变化做出迅速的反应 而这些变化产生了前所未有的大量数据 包括来自产品类别增加 供应中断和需求波动以及其它因素等多方面的数据 这些数据以多种格式存在于各种系统之中 虽然 企业为管理它们花费了
  • FastAPI准备之pydantic类型检查工具

    官方文档 https pydantic docs helpmanual io 这些组织都在用 Jupyter notebook FastAPI Amazon Web Services Uber Microsoft 优势 可以和IDE结合 可
  • hbase与spark笔试题(选择题)

    转自 https www cnblogs com cxzdy p 5388451 html http www bigdatastudy net show aspx id 175 cid 14 一 HBASE笔试题 HBase来源于哪篇博文
  • CVS命令深入研究 zz

    CVS命令深入研究 作者 leizhimin 日期 2006 11 2 环境 Windows server 2003 sp1简体中文版 cvsnt 2 5 03 2260 msi 目录 一 CVS命令整体结构 二 CVS帮助察看方法概述 三
  • 浅谈我所见识的数据治理项目

    开篇一张图 与正文不一定有关 图片来源于朋友圈 01 写在前面 熟悉笔者的朋友可能知道 笔者之前做的并非纯数据相关工作 产品或项目 笔者属于半路出家的数据人 之前也几乎没有直接接触过数据仓库 数据中台 数据平台等产品或项目 与数据库是一直打
  • 大数据Mapreduce编程——矩阵乘法

    编程要求 完成矩阵乘法的 Map 函数和 Reduce 函数 1 设计两个矩阵 3050 50100 在每个单元格中填入一个 0 99 的随机数 并写入 两个文件中 作为 Map 函数的输入 2 测试运行矩阵乘法的 MapReduce 框架
  • Emoji表情符号用于文本情感分析-Improving sentiment analysis accuracy with emoji embedding

    Abstract Due to the diversity and variability of Chinese syntax and semantics accurately identifying and distinguishing
  • 显著性检测论文阅读整理

    1 Visual Saliency Based on Multiscale Deep Features 原文链接 https arxiv org pdf 1503 08663 pdf 翻译 https blog csdn net weixi
  • QCustomPlot获取选点坐标

    QCustomPlot版本 Version 2 1 1 设置点选择模式 customPlot gt setInteractions QCP iSelectPlottables 2 绑定点击事件 connect customPlot QCus
  • response实现文件下载(java)

    import javax servlet ServletException import javax servlet ServletOutputStream import javax servlet http HttpServlet imp