Java如何使用 HTTP 请求下载图片
工具类:
public FileInputStream fileDownload(String fileLink) throws Exception {System.out.println("==============开始下载"+fileLink);// 转码中文URL url = new URL(encodeURLChinese(fileLink));System.out.println("fileLink:======================"+url);// 开始下载TrustStrategy acceptingTrustStrategy = (chain, authType) -> true;SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);HttpClientBuilder clientBuilder = HttpClients.custom();CloseableHttpClient httpClient = clientBuilder.setSSLSocketFactory(sslsf).build();HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();httpRequestFactory.setConnectTimeout(30000);httpRequestFactory.setConnectionRequestTimeout(30000);httpRequestFactory.setReadTimeout(30000);httpRequestFactory.setHttpClient(httpClient);RestTemplate template = new RestTemplate(httpRequestFactory);// 避免二次转码DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);template.setUriTemplateHandler(uriBuilderFactory);HttpHeaders headers = new HttpHeaders();HttpEntity<org.springframework.core.io.Resource> httpEntity = new HttpEntity<org.springframework.core.io.Resource>(headers);ResponseEntity<byte[]> response = template.exchange(url.toString(), HttpMethod.GET,httpEntity, byte[].class);byte[] body = response.getBody();// 创建临时文件File tempFile = File.createTempFile("temp", ".png");// 将 byte[] 写入临时文件try (FileOutputStream fos = new FileOutputStream(tempFile)) {if (body != null) {fos.write(body);}}// 创建 FileInputStream 对象FileInputStream stream = new FileInputStream(tempFile);System.out.println("=============下载结束");// 最后,记得在使用完后删除临时文件tempFile.delete();return stream;}public String encodeURLChinese(String url) {if (StringUtils.isEmpty(url)) {return null;}url = StringUtils.trim(url);try {if (!needEncoding(url)) {// 不需要编码return url;} else {// 需要编码String allowChars = ".!*'();:@&=+_\\-$,/?#\\[\\]{}|\\^~`<>%\"";
// String allowChars = ".!*'();:@&=+_\\-$,/?#\\[\\]{}|\\^~`<>%\"";// UTF-8 大写return encode(url, "UTF-8", allowChars, false);}} catch (Exception e) {throw new RuntimeException(e);}}
测试代码
@GetMapping("export")public WebResult<?> exportTeaAndStu() {try {String url = "https://6c6f-lowcode-9g7kjvsl444eff34-1304647831.tcb.qcloud.la/weda-uploader/7cafc8106cb7cddf27b11dc5c8673562-imageaaa.png?sign=70c4c8a6372fb8b8c743b996a4d1e7b0&t=1723021617";String aa = "http://localhost:1401/weda/myLecture/main/speaker/getPhotoByPhotoName?photoName=45550120240510094227.png";String fileName = "777";//通过链接返回一个输入流FileInputStream stream = fileDownload(url);minioUtil.uploadInputStream("mpbucket", "sjs/wdjz/zjrgl" + "/" + fileName + ".png", stream);return WebResult.ok();} catch (Exception e) {return WebResult.error(e.getMessage());}}
相关文章:
Java如何使用 HTTP 请求下载图片
工具类: public FileInputStream fileDownload(String fileLink) throws Exception {System.out.println("开始下载"fileLink);// 转码中文URL url new URL(encodeURLChinese(fileLink));System.out.println("fileLink:"url);// 开始下载Trust…...
ARM/Linux嵌入式面经(二十):地平线嵌入式开发
一面 1、自己介绍一下项目 一个清晰、结构化的表达能极大地提升你的专业形象。所以一定要养成结构性的回答,真的铁子,信我。 项目介绍示例 项目名称:智能温控系统 项目背景: 该项目旨在开发一款应用于智能家居环境的智能温控系统,通过精准控制室内温度,提高居住舒适度…...
无人机竞速赛
速度与激情的空中盛宴,无人机竞速赛再次点燃我们的肾上腺素! 想象一下,数百架智能飞行器在蓝天下疾驰,如同未来战士穿梭于现实与虚拟的边界,每一次转弯、加速都精准至极,挑战着物理与技术的极限࿰…...
【书生大模型实战营(暑假场)】入门任务二 Git 关卡
入门任务二 Git 关卡 参考: 教程任务 注意: 项目Github链接 1 闯关任务 1.1 使用 Git 完成破冰介绍 本任务将基于开发机实现,重点在于熟悉Git操作。首先要了解 Git操作的常见四部曲,即:舔 Add,提 Co…...
OSPF小实验
根据题目完成下列实验: 拓扑图详细设计如下: 1.基础配置 R1: [R1]interface s4/0/0 [R1-Serial4/0/0]ip address 12.1.1.1 24 [R1]interface LoopBack 0 [R1-LoopBack0]ip address 1.1.1.1 24 R2: [R2]interface s4/0/1 [R2-…...
蛋白质生物学:从序列到结构和疾病 下载并同时打开1LYZ和1H6M的PDB文件(提交图片)。描述这种蛋白质的二级和三级结构。(10分)
Download and open the PDB files of 1LYZ and 1H6M together in one view (submit an image). Describe the secondary and tertiary structure of this protein. (10 marks) 下面给出完整详细的解答: 同时打开1LYZ和1H6M的PDB文件得到: 首先二级结构…...
用VBA在Word中随机打乱单词表,进行分列
一、效果展示(以下是三次随机打乱的结果) 二、代码 Sub 随机分单词到后面的单元格()Dim C1 As CellDim str, str1, aDim shuffledArray() As VariantSet C1 Selection.Range.Tables(1).Cell(1, 1)str C1.Range.textstr mid(str, 3, Len(str) - 4)str…...
UNI-APP_点击,长按,触摸,结束触摸事件
touchstartEventHandle手指触摸动作开始字节跳动小程序不支持touchmoveEventHandle手指触摸后移动字节跳动小程序不支持touchendEventHandle手指触摸动作结束字节跳动小程序不支持touchcancelEventHandle手指触摸动作被打断,如来电提醒,弹窗字节跳动小程…...
【QT】Qt 音视频
Qt 音视频 Qt 音视频1. Qt 音频2. Qt 视频 Qt 音视频 在 Qt 中,音频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只支持播放 wav 格式的音频文件。也就是说如果想要添加音频效果,那么首先需要将非 wav 格式的音频文件转换为 wav 格式。 通…...
CSP-J 复赛 模拟题6
1.大小写字母互换: 题目描述 由输入给定一个字符串,你的任务是将原字符串中的大写字母转换成其对应的小写字母,还要将原字符串中的小写字母转换成对应的大写字母,其余字符不变。 输出转换之后得到的新字符串。 输入格式 一行…...
拷贝函数的三种调用方式
1.使用一个已经创建完成的对象来初始化一个新对象,就比如有参构造接收了一个属性后拷贝构造copy它后可以将获取的值赋值给自己的属性 记得拷贝后还要再进行赋值才行 2.值传递的方式给函数参数 额外声明一点,因为我们知道struct和class很相似,…...
C语言 | Leetcode C语言题解之第327题区间和的个数
题目: 题解: #define FATHER_NODE(i) (0 (i) ? -1 : ((i) - 1 >> 1)) #define LEFT_NODE(i) (((i) << 1) 1) #define RIGHT_NODE(i) (((i) << 1) 2)/* 优先队列(小根堆)。 */ typedef s…...
统计学:条件概率模型
照片由Edge2Edge Media在Unsplash上拍摄 一、介绍 在概率的许多应用中,不可能直接观察实验的结果;而是观察与结果相关的事件。因此,条件概率模型对于考虑和利用从观察到的事件中获得的信息至关重要。此外,条件概率模型与贝叶斯定理…...
前端工程师学习springboot2.x之配置idea热更新实现高效率开发节奏
目前已经学习springboot实现了增删改查分页查询,每次修改业财或者是代码重启项目都让我觉得很闹心,现在给出idea2021版本自带热更新操作设置,设置过程分享给大家 总结:以上就是配置的全部过程,祝大家写代码快乐…...
文本rerank与图像rerank
1、文本rerank: 这里介绍的是目前比较流行和通用一套方案:先利用特征检索(这里是特征空间上的相似度),召回相关信息,然后对query与召回的相关信息进行rerank(这里是利用cross-encoder网络做一个…...
Docker 在 Windows 系统下的使用指南:数据卷和数据库
Docker 在 Windows 系统下的使用指南:数据卷和数据库 Docker 提供了强大的功能来创建、管理和持久化数据。数据卷是 Docker 中用于存储和管理数据的机制,使得数据能够在容器的生命周期之外持久化。数据库容器可以利用数据卷来持久化数据库文件ÿ…...
[数据集][目标检测]轴承缺陷划痕检测数据集VOC+YOLO格式1166张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1166 标注数量(xml文件个数):1166 标注数量(txt文件个数):1166 标注…...
将本地微服务发布到docker镜像二:
上一篇文章我们介绍了如何将一个简单的springboot服务发布到docker镜像中,这一篇我们将介绍如何将一个复杂的微服务(关联mysql、redis)发布到docker镜像。 我们将使用以下两种不同的方式来实现此功能。 redis、mysql、springboot微服务分开…...
前端构建工具|vite快速入门
认识vite vite组成部分 Vite是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成: 一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。一…...
拯救PyCharm:击退IDE内存泄漏的策略
拯救PyCharm:击退IDE内存泄漏的策略 PyCharm,作为一款功能强大的集成开发环境(IDE),在处理大型项目或长时间开发过程中,可能会遇到内存泄漏的问题,导致IDE运行缓慢甚至崩溃。本文将提供一系列解…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
