当前位置: 首页 > news >正文

02_学习使用javax_ws_rs_下载文件

文章目录

  • 1 前言
  • 2 Maven 依赖
  • 3 下载接口
  • 4 如何返回文件?
  • 5 感谢

1 前言

  专栏上一篇,写了如何使用 javax.ws.rs 上传文件,那么必然的,我们得再学习学习如何下载文件😀

2 Maven 依赖

  这个就不赘述了,和上一篇,文件上传的 Maven 依赖一样。

3 下载接口

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;@Path("/test")
public interface TestController {@GET@Path("download")@Consumes(MediaType.APPLICATION_FORM_URLENCODED)Response download(@QueryParam("paramOne") String paramOne,@QueryParam("paramTwo") String paramTwo);
}

4 如何返回文件?

import org.springframework.util.Assert;
import javax.ws.rs.core.Response;public class TestService {public Response download(String paramOne, String paramTwo) {try {Assert.hasText(paramOne, "paramOne 不能为空");Assert.hasText(paramTwo, "paramTwo 不能为空");// 具体的业务逻辑, 产生了个文件File file = doSomethingThenGetAFile();String fileName = "text测试文件.txt";// URL 编码, 因为有中文this.urlEncodeFilename(fileName);return Response.ok().entity(file).header("Content-disposition", "attachment;filename*=utf-8''" + fileName).header("Content-Type", "text/plain").encoding("utf-8").build();} catch (Exception e) {logger.error("下载文件出现异常", e);return Response.ok().entity(JsonResult.fail(e.getMessage())).header("Content-Type", "application/json").encoding("utf-8").build();}}/*** 对 filename 进行 URL 编码** @param filename 文件名* @return 编码后的文件名*/public String urlEncodeFilename(String filename) {try {return URLEncoder.encode(filename, StandardCharsets.UTF_8.name());} catch (UnsupportedEncodingException e) {log.error("对文件名 {}, 进行 URL 编码时, 出现异常 {}", filename, e.getMessage());throw new RuntimeException("对文件名 " + filename + ", 进行 URL 编码时, 出现异常", e);}}
}

5 感谢

  感谢阅读~ 如有错误之处,请帮忙指正~

相关文章:

02_学习使用javax_ws_rs_下载文件

文章目录 1 前言2 Maven 依赖3 下载接口4 如何返回文件?5 感谢 1 前言 专栏上一篇,写了如何使用 javax.ws.rs 上传文件,那么必然的,我们得再学习学习如何下载文件😀 2 Maven 依赖 这个就不赘述了,和上一篇…...

js校验多个时间段的时间是否有交叉

参考博客: Java日期时间API系列37-----时间段是否有重叠(交集)的计算方法 Java 最优雅方式校验时间段重叠 判断是否有交叉数据 let timePeriod [{start: dateList[0].value, //时间段1的开始时间 时间格式为1130(代表11&#xf…...

Python Spyder开发的应用项目

Python是一种功能强大且受欢迎的编程语言,被广泛应用于科学计算、数据分析和机器学习等领域。而Spyder则是一款专为科学计算和数据分析而设计的Python集成开发环境(IDE)。本文将介绍Spyder的特点、功能以及如何使用。 特点 Spyder具有以下主…...

ES6知识点

ES6 知识点及常考面试题 var、let 及 const 区别 涉及面试题:什么是提升?什么是暂时性死区?var、let 及 const 区别?对于这个问题,我们应该先来了解提升(hoisting)这个概念。 console.log(a)…...

数据结构详解各种算法

1、设有两个整型顺序表L1,L2,其元素值递增有序存放,请定义该顺序表的元素类型及表类型,设计以下自定义函数: (1)录入顺序表中所有元素的值。 (2)将顺序表L1,L2合并为到…...

Qt实现右键菜单

一、实现方法 QWidget提供了虚函数: virtual void contextMenuEvent(QContextMenuEvent*event);覆写该函数,即可。 二、Example 创建一个基本的mainwindow项目, 头文件: class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWin…...

MySQL基础篇一

基础篇 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段) DML: 数据操作语言,用来对数据库表中的数据进行增删改 DQL: 数据查询语言,用来查询数据库中表的记录 DCL: 数据控制语言&#xff…...

深入了解Java8新特性-日期时间API:OffsetDateTime类

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概24000多字,预计阅读时间长需要20分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&…...

企业微信http协议接口开发,发送位置消息

产品说明 一、 hook版本:企业微信hook接口是指将企业微信的功能封装成dll,并提供简易的接口给程序调用。通过hook技术,可以在不修改企业微信客户端源代码的情况下,实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…...

CSS——基础选择器、文字控制属性

1、CSS定义 层叠样式表(Cascading Style Sheets,缩写为CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容)。 书写位置:title 标签下方添加style双标签,styl…...

08-中介者模式-C语言实现

中介者模式: Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly,and it lets you vary their interaction independently.(用一个中介对…...

【开源】基于JAVA的医院门诊预约挂号系统

项目编号: S 033 ,文末获取源码。 \color{red}{项目编号:S033,文末获取源码。} 项目编号:S033,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2…...

NodeJs(一):初识nodejs、模块化、CommonJS、ESModule等

目录 (一)Nodejs简介 1.nodejs是什么 2.nodejs架构 3.nodejs的应用场景 (二)准备工作 1.安装nodejs 2.nodejs版本管理工具 (三)nodejs的使用 1.node的输入 2.node的输出 3.其他的console方法 (四)全局对象 1.常见的全局对象 2.特殊的全局对象 3.global和window的…...

hive 命令记录(随时更新)

1.进入 hive 数据库: hive 2.查看hive中的所有数据库: show databases; 3.用 default 数据库 use default; 4.查看所有的表 show tables; 5.查询 book 表结构: desc book ; 6.查询 book 表数据 select * from book; 7.创建 shop 数据库 creat…...

java实战(五):理解多线程与多线程实现冒泡排序及可视化

多线程 1.多线程理解1.1线程概念1.2线程的创建和启动1.3线程的同步与互斥1.4线程的状态和生命周期1.5线程间的通信1.6处理线程的异常和错误1.7实践 2.效果3.代码 1.多线程理解 1.1线程概念 线程:计算机中能够执行独立任务的最小单位。在操作系统中,每个…...

mysql-binlog,redolog 和 undolog区别

binlog MySQL的binlog(二进制日志 或 归档日志)是一种记录数据库的更改操作的日志。它包含了对数据库进行的插入、更新和删除操作的详细信息。binlog是以二进制格式存储,可以用于恢复数据库、数据复制和数据同步等操作。具体来说&#xff0c…...

Redis SDS 源码

struct sdshdr {int len;int free;char buf[]; }; 底层数据结构的好处: 杜绝缓冲区溢出。减少修改字符串长度时所需的内存重分配次数。二进制安全。兼容部分C字符串函数。 常用命令: set key value、get key 等 应用场景:共享 session、分…...

肖sir__mysql之单表练习题2__(2)

mysql之单表练习题 一.建表语句 create table grade(class int(4),chinese int(8),english int(4),math int(8),name varchar(20),age int(8),sid int(4)primary key auto_increment) DEFAULT charsetutf8; insert into grade(class,chinese,english,math,name,age)values(1833…...

nuxt、vue实现PDF和视频文件的上传、下载、预览

上传 上传页面 <el-form-item :label"(form.ququ3 1 ? 参培 : form.ququ3 2 ? 授课 : ) 证明材料" prop"ququ6"><PdfUpload v-model"form.ququ6" :fileType"[pdf, mp4, avi, ts]"></PdfUpload> </el-form-i…...

c++ 写成.h .cpp main.cpp 多文件形式

1 .h 声明方法/函数 用于连接定义和实例使用 // max.h #ifndef MAX_H #define MAX_Hint max(int a, int b);#endif /* 在#ifndef和#define中使用的MAX_H就是指的max.h这个头文件的名字。具体来说,#ifndef MAX_H中MAX_H代表了max.h这个头文件的一个唯一的标识符。#define MAX_H…...

Vue3 + Element Plus项目实战:如何封装一个带比例锁定和实时预览的智能图片裁剪上传组件?

Vue3 Element Plus实战&#xff1a;构建智能图片裁剪上传组件的工程化实践 在当今的Web应用中&#xff0c;图片上传几乎是每个系统的标配功能。但简单的文件选择器往往无法满足专业需求——设计师需要精确控制图片比例&#xff0c;产品经理要求实时预览效果&#xff0c;而开发…...

KingbaseES V8R6备份还原踩坑实录:sys_dump、sys_restore和ksql到底怎么选?

KingbaseES V8R6备份还原实战指南&#xff1a;工具选型与典型问题解析 第一次接触KingbaseES V8R6的备份还原工作时&#xff0c;面对sys_dump、sys_restore和ksql这三个工具&#xff0c;我像大多数新手一样陷入了选择困难。记得那次紧急数据迁移任务&#xff0c;当我信心满满地…...

EnviroDIY_DS3231库详解:DS3231高精度RTC驱动与低功耗唤醒实践

1. EnviroDIY_DS3231 库深度解析&#xff1a;面向嵌入式数据采集系统的高精度RTC驱动实践1.1 库定位与工程价值EnviroDIY_DS3231 是一个专为 Arduino 生态设计的 DS3231 实时时钟&#xff08;RTC&#xff09;驱动库&#xff0c;其核心目标并非简单封装 IC 通信&#xff0c;而是…...

程序员因简单自动化放弃Python转C,底层逻辑令人震撼

一、一个“简单自动化”&#xff0c;逼得程序员放弃Python转C 拥有一个共识的程序员是很多的&#xff0c;那就是Python、JavaScript上手速度快&#xff0c;还省力&#xff0c;进行写自动化工具完全就是“降维打击”&#xff0c;又有谁会花费力气去写晦涩到难以理解的C语言呢&am…...

接cst-matlab自动化建模,cst天线/超表面数据集自动化计算和收集,提供建模代码

接cst-matlab自动化建模&#xff0c;cst天线/超表面数据集自动化计算和收集&#xff0c;提供建模代码&#xff0c;提供数据集数据CST和MATLAB这对组合最近被我玩出花了。搞天线设计的朋友应该都懂&#xff0c;手动建模调参简直是精神折磨——尤其是超表面这种动辄几十个单元的结…...

Redis 实战篇1.4 (Redis优化秒杀)

Redis优化秒杀原流程思路Redis优化秒杀在Redis中库存用String数据类型存储&#xff0c;为了确保一人一单&#xff0c;则订单id存储用Set数据类型保证数据的唯一性lua脚本保证原子性异步秒杀方案案例&#xff1a;需求创建订单&#xff08;还没完成明天继续&#xff09;// 解锁的…...

Res-Unet实战:在医学图像分割任务中,为什么以及如何用ResNet50替换普通卷积层?

Res-Unet在医学图像分割中的深度优化实践 医学图像分割一直是计算机视觉领域最具挑战性的任务之一。当我们在处理CT扫描、MRI图像或病理切片时&#xff0c;传统U-Net架构虽然表现出色&#xff0c;但随着网络深度增加&#xff0c;梯度消失和特征退化问题逐渐显现。这时&#xff…...

解决 Antigravity 新谷歌账户无法登录的问题

最近在使用 Antigravity 时遇到一个奇葩问题&#xff0c;折腾了大半天终于解决&#xff0c;特意记录下来&#xff0c;希望能帮到有同样困扰的小伙伴 —— 老谷歌免费账户能正常登录 Antigravity&#xff0c;但新注册的谷歌 Pro 账户&#xff08;和老账户一样都是美国地区&#…...

多车环境下车载毫米波雷达是否会相互干扰?

在汽车工业迈向智能化与自动化的进程中&#xff0c;毫米波雷达已然成为了车辆感知体系中不可或缺的一部分。这种波长介于1毫米至10毫米之间的电磁波进行探测的装置&#xff0c;凭借其能够穿透雨雪、浓雾及强光直射的全天候工作能力&#xff0c;为高级驾驶辅助系统提供了关键的距…...

Driver Store Explorer终极指南:三步清理Windows冗余驱动,快速释放数十GB空间

Driver Store Explorer终极指南&#xff1a;三步清理Windows冗余驱动&#xff0c;快速释放数十GB空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间越来越…...