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

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 请求下载图片

工具类&#xff1a; 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、自己介绍一下项目 一个清晰、结构化的表达能极大地提升你的专业形象。所以一定要养成结构性的回答,真的铁子,信我。 项目介绍示例 项目名称:智能温控系统 项目背景: 该项目旨在开发一款应用于智能家居环境的智能温控系统,通过精准控制室内温度,提高居住舒适度…...

无人机竞速赛

速度与激情的空中盛宴&#xff0c;无人机竞速赛再次点燃我们的肾上腺素&#xff01; 想象一下&#xff0c;数百架智能飞行器在蓝天下疾驰&#xff0c;如同未来战士穿梭于现实与虚拟的边界&#xff0c;每一次转弯、加速都精准至极&#xff0c;挑战着物理与技术的极限&#xff0…...

【书生大模型实战营(暑假场)】入门任务二 Git 关卡

入门任务二 Git 关卡 参考&#xff1a; 教程任务 注意&#xff1a; 项目Github链接 1 闯关任务 1.1 使用 Git 完成破冰介绍 本任务将基于开发机实现&#xff0c;重点在于熟悉Git操作。首先要了解 Git操作的常见四部曲&#xff0c;即&#xff1a;舔 Add&#xff0c;提 Co…...

OSPF小实验

根据题目完成下列实验&#xff1a; 拓扑图详细设计如下&#xff1a; 1.基础配置 R1&#xff1a; [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&#xff1a; [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) 下面给出完整详细的解答&#xff1a; 同时打开1LYZ和1H6M的PDB文件得到&#xff1a; 首先二级结构…...

用VBA在Word中随机打乱单词表,进行分列

一、效果展示&#xff08;以下是三次随机打乱的结果&#xff09; 二、代码 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手指触摸动作被打断&#xff0c;如来电提醒&#xff0c;弹窗字节跳动小程…...

【QT】Qt 音视频

Qt 音视频 Qt 音视频1. Qt 音频2. Qt 视频 Qt 音视频 在 Qt 中&#xff0c;音频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只支持播放 wav 格式的音频文件。也就是说如果想要添加音频效果&#xff0c;那么首先需要将非 wav 格式的音频文件转换为 wav 格式。 通…...

CSP-J 复赛 模拟题6

1.大小写字母互换&#xff1a; 题目描述 由输入给定一个字符串&#xff0c;你的任务是将原字符串中的大写字母转换成其对应的小写字母&#xff0c;还要将原字符串中的小写字母转换成对应的大写字母&#xff0c;其余字符不变。 输出转换之后得到的新字符串。 输入格式 一行…...

拷贝函数的三种调用方式

1.使用一个已经创建完成的对象来初始化一个新对象&#xff0c;就比如有参构造接收了一个属性后拷贝构造copy它后可以将获取的值赋值给自己的属性 记得拷贝后还要再进行赋值才行 2.值传递的方式给函数参数 额外声明一点&#xff0c;因为我们知道struct和class很相似&#xff0c…...

C语言 | Leetcode C语言题解之第327题区间和的个数

题目&#xff1a; 题解&#xff1a; #define FATHER_NODE(i) (0 (i) ? -1 : ((i) - 1 >> 1)) #define LEFT_NODE(i) (((i) << 1) 1) #define RIGHT_NODE(i) (((i) << 1) 2)/* 优先队列&#xff08;小根堆&#xff09;。 */ typedef s…...

统计学:条件概率模型

照片由Edge2Edge Media在Unsplash上拍摄 一、介绍 在概率的许多应用中&#xff0c;不可能直接观察实验的结果&#xff1b;而是观察与结果相关的事件。因此&#xff0c;条件概率模型对于考虑和利用从观察到的事件中获得的信息至关重要。此外&#xff0c;条件概率模型与贝叶斯定理…...

前端工程师学习springboot2.x之配置idea热更新实现高效率开发节奏

目前已经学习springboot实现了增删改查分页查询&#xff0c;每次修改业财或者是代码重启项目都让我觉得很闹心&#xff0c;现在给出idea2021版本自带热更新操作设置&#xff0c;设置过程分享给大家 总结&#xff1a;以上就是配置的全部过程&#xff0c;祝大家写代码快乐…...

文本rerank与图像rerank

1、文本rerank&#xff1a; 这里介绍的是目前比较流行和通用一套方案&#xff1a;先利用特征检索&#xff08;这里是特征空间上的相似度&#xff09;&#xff0c;召回相关信息&#xff0c;然后对query与召回的相关信息进行rerank&#xff08;这里是利用cross-encoder网络做一个…...

Docker 在 Windows 系统下的使用指南:数据卷和数据库

Docker 在 Windows 系统下的使用指南&#xff1a;数据卷和数据库 Docker 提供了强大的功能来创建、管理和持久化数据。数据卷是 Docker 中用于存储和管理数据的机制&#xff0c;使得数据能够在容器的生命周期之外持久化。数据库容器可以利用数据卷来持久化数据库文件&#xff…...

[数据集][目标检测]轴承缺陷划痕检测数据集VOC+YOLO格式1166张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1166 标注数量(xml文件个数)&#xff1a;1166 标注数量(txt文件个数)&#xff1a;1166 标注…...

将本地微服务发布到docker镜像二:

上一篇文章我们介绍了如何将一个简单的springboot服务发布到docker镜像中&#xff0c;这一篇我们将介绍如何将一个复杂的微服务&#xff08;关联mysql、redis&#xff09;发布到docker镜像。 我们将使用以下两种不同的方式来实现此功能。 redis、mysql、springboot微服务分开…...

前端构建工具|vite快速入门

认识vite vite组成部分 Vite是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。它主要由两部分组成&#xff1a; 一个开发服务器&#xff0c;它基于 原生 ES 模块 提供了 丰富的内建功能&#xff0c;如速度快到惊人的 模块热更新&#xff08;HMR&#xff09;。一…...

拯救PyCharm:击退IDE内存泄漏的策略

拯救PyCharm&#xff1a;击退IDE内存泄漏的策略 PyCharm&#xff0c;作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;在处理大型项目或长时间开发过程中&#xff0c;可能会遇到内存泄漏的问题&#xff0c;导致IDE运行缓慢甚至崩溃。本文将提供一系列解…...

大数据表格销毁后内存居高不下?不是泄漏,是GC不及时!(原理+终极解决方案)

大数据表格销毁后内存居高不下&#xff1f;不是泄漏&#xff0c;是GC不及时&#xff01;&#xff08;原理终极解决方案&#xff09; 一、前言 在后台系统中&#xff0c;一旦渲染 上千行、上万行 大数据表格&#xff0c;就会出现一个经典现象&#xff1a; 切换路由、销毁组件后&…...

Blackbird身份验证终极指南:API密钥安全管理与配置技巧

Blackbird身份验证终极指南&#xff1a;API密钥安全管理与配置技巧 【免费下载链接】blackbird An OSINT tool to search for accounts by username and email in social networks. 项目地址: https://gitcode.com/GitHub_Trending/bl/blackbird Blackbird是一款强大的开…...

FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香!芯

正文 异步/等待解决了什么问题&#xff1f; 在传统同步I/O操作中&#xff08;如文件读取或Web API调用&#xff09;&#xff0c;调用线程会被阻塞直到操作完成。这在UI应用中会导致界面冻结&#xff0c;在服务器应用中则造成线程资源的浪费。async/await通过非阻塞的异步操作解…...

OpenAI API 报错 insufficient_quota 怎么办?4 种方案实测,最后一种最省心

上周五晚上十一点半&#xff0c;我正用 GPT-5 的 API 跑一个批量文本分类任务&#xff0c;跑到一半控制台突然刷屏红色报错&#xff1a;You exceeded your current quota, please check your plan and billing details. 错误码 insufficient_quota&#xff0c;HTTP 状态码 429。…...

还在为充气泵电压波动导致MCU复位发愁吗?CSM53系列拥有40V宽压输入配合优秀的瞬态响应,轻松抵御电机启停浪涌,配合2.5μA微功耗,让你的便携充气泵续航提升30%!

CSM53系列LDO在充气泵中的详细应用分析一、先搞懂核心&#xff1a;CSM53系列LDO的关键特性&#xff08;适配充气泵的核心优势&#xff09;在分析应用前&#xff0c;先明确这款芯片的核心参数&#xff0c;这是适配充气泵场景的基础&#xff1a;* 二、充气泵的系统架构与LDO的定位…...

Swoole vs RoadRunner vs PHP-PM:异步I/O配置参数对比表(含内存泄漏率、上下文切换耗时、FD复用率实测)

第一章&#xff1a;Swoole vs RoadRunner vs PHP-PM 异步I/O配置全景概览现代PHP高性能服务化方案中&#xff0c;Swoole、RoadRunner 和 PHP-PM 均通过常驻内存与异步I/O机制突破传统PHP-FPM的阻塞模型&#xff0c;但其实现路径、依赖模型与配置范式存在本质差异。三者均不依赖…...

如何在唐山挑选性价比高的二手房步梯房随着城市化进程的加快,越来越多的人选择购买二手房作为自己的居所。特别是在像唐山这样的城市里,由于其地理位置优越、经济发展迅速,二手房市场更是受到了不少购房者的青

随着城市化进程的加快&#xff0c;越来越多的人选择购买二手房作为自己的居所。特别是在像唐山这样的城市里&#xff0c;由于其地理位置优越、经济发展迅速&#xff0c;二手房市场更是受到了不少购房者的青睐。然而&#xff0c;在众多房源中挑选出既适合自己又具有高性价比的房…...

YOLOE官版镜像快速部署指南:5分钟搞定开放词汇目标检测环境

YOLOE官版镜像快速部署指南&#xff1a;5分钟搞定开放词汇目标检测环境 1. 引言&#xff1a;为什么选择YOLOE官版镜像 在计算机视觉领域&#xff0c;目标检测技术已经发展得相当成熟。然而&#xff0c;传统模型如YOLOv5/v8存在一个明显局限——它们只能识别训练时见过的固定类…...

Element Plus访问提速实战:突破跨境网络限制的三大解决方案

Element Plus访问提速实战&#xff1a;突破跨境网络限制的三大解决方案 【免费下载链接】element-plus &#x1f389; A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为Vue 3生态中最受欢迎…...

GTE-Base-ZH赋能Java应用:SpringBoot集成与语义搜索实战

GTE-Base-ZH赋能Java应用&#xff1a;SpringBoot集成与语义搜索实战 最近在做一个电商后台的搜索功能升级&#xff0c;用户反馈说&#xff0c;用关键词搜商品经常找不到想要的东西。比如用户搜“适合夏天穿的轻薄外套”&#xff0c;传统的搜索可能只匹配到“外套”&#xff0c…...