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

记HttpURLConnection下载图片

目录

一、示例代码1

二、示例代码2


一、示例代码1

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;public class Test {/*** 下载图片*/public void getNetImg() {InputStream inStream = null;FileOutputStream fOutStream =null;try {// URL 统一资源定位符URL url = new URL("https://t7.baidu.com/it/u=825057118,3516313570&fm=193&f=GIF");// 建立HttpURLConnection连接对象HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设定 请求方式connection.setRequestMethod("GET");// 连接服务器connection.connect();// 判断请求响应是否成功,响应的状态码。200 响应成功、404 或 500等if(connection.getResponseCode()==200){System.out.println("connection.getResponseCode()返回的状态码:"+connection.getResponseCode());// 从输入流中读取inStream = connection.getInputStream();// 文件输出流fOutStream = new FileOutputStream(new File("E:\\天空之城.jpg")); //new File("myImg.jpg")默认存储在项目根目录// 定义缓存字节数组,存放图片byte[] bs = new byte[1024];int len  = 0;while((len = inStream.read(bs))!=-1){ //inStream.read(bs);返回的是数组的长度。最多一次读出bs.length个字节,读到文件末尾返回-1fOutStream.write(bs, 0, len); //写入到文件输出流中fOutStream.flush(); // 强制持久化到存储设备,然后清空缓存}} else {System.out.println("响应失败!状态码:"+connection.getResponseCode());}} catch (IOException e) {e.printStackTrace();}finally {if(inStream!=null){try {inStream.close(); // 关闭输入流} catch (IOException e) {e.printStackTrace();}}if(fOutStream!=null){try {fOutStream.close(); // 关闭输出流} catch (IOException e) {e.printStackTrace();}}}}}

下载后存储的主要代码:

// 从输入流中读取
inStream = connection.getInputStream();
// 文件输出流
fOutStream = new FileOutputStream(new File("E:\\天空之城.jpg"));
注:new File("E:\\天空之城.jpg")指定下载后文件的保存位置。new File("myImg.jpg")默认存储在项目根目录// 定义缓存字节数组,存放图片
byte[] bs = new byte[1024];
int len  = 0;//inStream.read(bs);返回的是数组的长度。最多一次读出bs.length个字节,读到文件末尾返回-1
while((len = inStream.read(bs))!=-1){ fOutStream.write(bs, 0, len); //写入到文件输出流中fOutStream.flush(); // 强制持久化到存储设备,然后清空缓存
}

二、示例代码2

import org.apache.commons.codec.binary.Base64;
import org.springframework.util.FileCopyUtils;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;public class Test {public Map<String, String> getWFile() throws Exception {// 定义mapMap<String, String> map = new HashMap<String, String>();URL url = new URL("https://gd-hbimg.huaban.com/02e9bd22213105052e000fa3dfde5b69a98ae3521e224-q1KQCC_fw1200webp");HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(1000*5);//5秒,连接超时时间conn.setReadTimeout(1000*20);//20秒,读取超时时间conn.setRequestProperty("Content-Type", "application/octet-stream");conn.setDoOutput(true);conn.setDoInput(true);//conn.setRequestProperty("Connection", "Keep-Alive"); // 设置为HTTP长连接conn.connect();System.out.println("connection.getResponseCode()返回的状态码:"+conn.getResponseCode());InputStream inputStream = conn.getInputStream(); //输入流,从中读取ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); //字节输出流byte[] buff = new byte[100]; //定义缓存字节数组int rc = 0;while ((rc = inputStream.read(buff, 0, 100)) > 0) {swapStream.write(buff, 0, rc); //写入字节输出流swapStream.flush();  // 强制持久化到存储设备,然后清空缓存}byte[] data = swapStream.toByteArray(); //toByteArray(),ByteArrayOutputStream对象 转字节数组map.put("inputStream", Base64.encodeBase64String(data)); //对字节数组编码为Base64字符串(String)return map;}public static void main(String[] args) {try{Test test=new Test();// 调用方法getWFile()下载文件Map<String, String> map = test.getWFile();byte[] bytes = Base64.decodeBase64(map.get("inputStream")); // 将Base64字符串解码 为byte[]数组ByteArrayInputStream bs = new ByteArrayInputStream(bytes); // 创建转换为ByteArrayInputStream字节数组输入流对象FileOutputStream out = new FileOutputStream(new File("E:\\天空之城2.jpg")); //创建文件输出流,(目标文件)//FileCopyUtils.copy(bs, out)是用于文件复制的方法,其中bs代表源文件的字节数据,而out代表目标文件的位置。// 这个方法的主要用途包括简化文件复制操作,避免编写繁琐的文件读写代码,提供高效的文件复制方法,提高文件传输的效率,并支持多种数据源和目标源的复制操作,// 如从输入流到输出流、从文件到文件等‌。此方法用到内存,注意JVM内存溢出问题(文件太大时)。FileCopyUtils.copy(bs, out);}catch (Exception e){e.printStackTrace();}}}

示例代码2中主要增加了:

conn.setConnectTimeout(1000*5);//5秒,连接超时时间
conn.setReadTimeout(1000*20);//20秒,读取超时时间
注:两个超时设置防止网络异常或服务端异常时,导致客户端长时间连接或读取不释放,而影响客户端应用的正常运行。
main方法中使用了FileCopyUtils.copy(bs, out)是用于文件复制的方法,其中bs代表源文件的字节数据,而out代表目标文件的位置。这个方法的主要用途包括简化文件复制操作,避免编写繁琐的文件读写代码,提供高效的文件复制方法,提高文件传输的效率,并支持多种数据源和目标源的复制操作,
如从输入流到输出流、从文件到文件等‌。此方法用到内存,注意JVM内存溢出问题(文件太大时)。

说说conn.setRequestProperty("Connection", "Keep-Alive")设置:

HTTP的Keep-Alive即:保持Http长连接,底层通过保持TCP连接一段时间来达到长连接的目的。这段时间可以重复发送HTTP请求(request/response)。解决HTTP请求量大的情况。

HTTP 1.0 中默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-Alive;

HTTP 1.1 中默认启用Keep-Alive,如果加入"Connection: close ",才关闭。

一般而言客户端只设置是否启用Keep-Alive,而保持连接的控制取决于服务端(如保持连接的时长、最大连接数量等)。tomcat、weblogic等各自设置属性有不同。现在的浏览器、java8往后都是默认开启的Keep-Alive。

相关文章:

记HttpURLConnection下载图片

目录 一、示例代码1 二、示例代码2 一、示例代码1 import java.io.*; import java.net.HttpURLConnection; import java.net.URL;public class Test {/*** 下载图片*/public void getNetImg() {InputStream inStream null;FileOutputStream fOutStream null;try {// URL 统…...

物联网实训室建设的必要性

物联网实训室建设的必要性 一、物联网发展的背景 物联网&#xff08;IoT&#xff09;是指通过信息传感设备&#xff0c;按照约定的协议&#xff0c;将任何物品与互联网连接起来&#xff0c;进行信息交换和通信&#xff0c;以实现智能化识别、定位、跟踪、监控和管理的一种网络…...

初识C语言(四)

目录 前言 十一、常见关键字&#xff08;补充&#xff09; &#xff08;1&#xff09;register —寄存器 &#xff08;2&#xff09;typedef类型重命名 &#xff08;3&#xff09;static静态的 1、修饰局部变量 2、修饰全局变量 3、修饰函数 十二、#define定义常量和宏…...

产品架构图:从概念到实践

在当今快速发展的科技时代&#xff0c;产品架构图已成为产品经理和设计师不可或缺的工具。它不仅帮助我们理解复杂的产品体系&#xff0c;还能指导我们进行有效的产品设计和开发。本文将深入探讨产品架构图的概念、重要性以及绘制方法。 整个内容框架分为三个部分&#xff0c;…...

smartctl 命令:查看硬盘健康状态

一、命令简介 ​smartctl​ 命令用于获取硬盘的 SMART 信息。 介绍硬盘SMART 硬盘的 SMART (Self-Monitoring, Analysis, and Reporting Technology) 技术用于监控硬盘的健康状态&#xff0c;并能提供一些潜在故障的预警信息。通过查看 SMART 数据&#xff0c;用户可以了解硬…...

BBR 为什么没有替代 CUBIC 成为 Linux 内核缺省算法

自 2017 年底 bbr 发布以来&#xff0c;随着媒体的宣讲&#xff0c;各大站点陆续部署 bbr&#xff0c;很多网友不禁问&#xff0c;bbr 这么好&#xff0c;为什么不替代 cubic 成为 linux 的缺省算法。仅仅因为它尚未标准化&#xff1f;这么好的算法又为什么没被标准化&#xff…...

Git忽略规则原理和.gitignore文件不生效的原因和解决办法

在使用Git进行版本控制时&#xff0c;.gitignore文件扮演着至关重要的角色。它允许我们指定哪些文件或目录应该被Git忽略&#xff0c;从而避免将不必要的文件&#xff08;如日志文件、编译产物等&#xff09;纳入版本控制中。然而&#xff0c;在实际使用过程中&#xff0c;有时…...

MySQL-数据库设计

1.范式 数据库的范式是⼀组规则。在设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数 据库&#xff0c;这些不同的规范要求被称为不同的范式。 关系数据库有六种范式&#xff1a;第⼀范式&#xff08;1NF&#xff09;、第⼆范式&#xff08;…...

Unity开发绘画板——04.笔刷大小调节

笔刷大小调节 上面的代码中其实我们已经提供了笔刷大小的字段&#xff0c;即brushSize&#xff0c;现在只需要将该字段和界面中的Slider绑定即可&#xff0c;Slider值的范围我们设置为1~20 代码中只需要做如下改动&#xff1a; public Slider brushSizeSlider; //控制笔刷大…...

./mnt/container_run_medium.sh

#!/bin/bash# 清理旧的日志文件 rm -f *.log rm -f nohup.out rm -f cssd.dat# 启动 pwbox_simu 和 MediumBoxBase nohup /mnt/simutools/pwbox_simu /mnt/simutools/pw_box.conf > /dev/null 2>&1 & nohup /mnt/mediumSimu/MediumBoxBase /mnt/mediumSimu/hynn_…...

数学建模研赛总结

目录 前言进度问题四分析问题五分析数模论文经验分享总结 前言 本文为博主数学建模比赛第五天的内容记录&#xff0c;希望所写的一些内容能够对大家有所帮助&#xff0c;不足之处欢迎大家批评指正&#x1f91d;&#x1f91d;&#x1f91d; 进度 今天已经是最后一天了&#xf…...

通信工程学习:什么是TCF技术控制设施

TCF&#xff08;Technical Control Facility&#xff09;&#xff1a;技术控制设施 首先&#xff0c;需要明确的是&#xff0c;通信工程是一门涉及电子科学与技术、信息与通信工程和光学工程学科领域的基础理论、工程设计及系统实现技术的学科。它主要关注通信过程中的信息传输…...

stm32 bootloader跳转程序设计

文章目录 1、bootloader跳转程序设计&#xff08;1&#xff09;跳转程序&#xff08;2&#xff09;、app程序中需要注意<1>、在keil中ROM起始地址和分配的空间大小<2>、在system_stm32f4xx.c中设置VECT_TAB_OFFSET为需要偏移的地址<3>、main函数中使能中断 总…...

科技赋能环保:静电与光解技术在油烟净化中的卓越应用

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 随着环保政策的不断升级&#xff0c;餐饮行业的油烟治理成为重要课题。油烟净化器的技术革新不仅提升了净化效率&#xff0c;…...

FCA-FineBI试卷答案

1、【判断题】FineBI数据加工建模中只支持文本、数值、日期三种数据类型。 正确答案&#xff1a;A A. 正确 B. 错误 2、【判断题】Excel 支持批量导入&#xff0c;可以一次导入多个 sheet 或 Excel&#xff1f; 正确答案&#xff1a;A A.正确 B. 错误 3、【判断题】FineBI V6.…...

Spring - @Import注解

文章目录 基本用法源码分析ConfigurationClassPostProcessorConfigurationClass SourceClassgetImportsprocessImports处理 ImportSelectorImportSelector 接口DeferredImportSelector 处理 ImportBeanDefinitionRegistrarImportBeanDefinitionRegistrar 接口 处理Configuratio…...

新能源汽车储充机器人:能源高效与智能调度

新能源汽车储充机器人&#xff1a;开启能源高效利用与智能调度的未来之门 随着全球能源危机的日益加剧和环境污染问题的不断恶化&#xff0c;新能源汽车成为了未来交通领域的重要发展方向。然而&#xff0c;新能源汽车的普及不仅需要解决电池技术的瓶颈&#xff0c;还需要构建一…...

【Linux网络】详解TCP协议(2)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux网络 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 TCP协议的三次握手和四次挥手 的相关内容。 如果看到最后您觉得…...

STM32DMA学习日记

STM32 DMA学习日记 写于2024/9/28晚 文章目录 STM32 DMA学习日记1. DMA简介2. I/O方式2.1 程序查询方式2.2 程序中断方式2.3 DMA方式 3.DMA框图4. 相关寄存器4.1 DMA中断状态寄存器&#xff08;DMA_ISR&#xff09;4.2 DMA中断标志清除寄存器&#xff08;DMA_IFCR&#xff09;…...

【高性能内存池】page cache 5

page cache 1 page cache的框架2 central cache从page cache申请n页span的过程3 page cache 的结构3.1 page cache类框架3.2 central cache向page cache申请span3.3 获取k页的span page cache的结构和central cache是一样的&#xff0c;都是哈希桶的结构&#xff0c;并且挂载的…...

天气图片分类模型:基于迁移学习与GPU资源优化

天气图片分类模型:基于迁移学习与GPU资源优化 1. 引言 天气识别在自动驾驶、户外监控、气象服务等领域具有重要应用价值。传统方法依赖于手工设计的特征(如纹理、颜色直方图),鲁棒性不足。深度学习尤其是卷积神经网络(CNN)能够自动从图像中学习层次化特征,显著提升分类…...

PHP反序列化漏洞实战:从CTFshow F5杯‘eazy-unserialize’两道题,到文件包含与协议利用的完整避坑指南

PHP反序列化漏洞实战&#xff1a;从CTF题目到真实漏洞利用的深度解析 在CTF竞赛中&#xff0c;PHP反序列化漏洞一直是Web安全方向的热门考点。这类漏洞不仅考验选手对PHP语言特性的理解&#xff0c;更要求具备将多个知识点串联运用的能力。本文将以一道典型CTF题目为例&#xf…...

终极指南:Visual C++运行库一键修复完整教程

终极指南&#xff1a;Visual C运行库一键修复完整教程 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开软件时突然弹出"无法启动此程序…...

在Hermes Agent项目中集成Taotoken实现自定义模型供应商的切换

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Hermes Agent项目中集成Taotoken实现自定义模型供应商的切换 1. 场景与目标 Hermes Agent 是一个功能强大的智能体开发框架&…...

PCIe均衡参数测量实战:从8GT/s到32GT/s,示波器上的电压怎么量?

PCIe均衡参数测量实战&#xff1a;从8GT/s到32GT/s的示波器操作指南 在高速串行通信领域&#xff0c;PCIe接口的均衡参数测量是确保信号完整性的关键环节。随着数据传输速率从8GT/s跃升至32GT/s&#xff0c;工程师面临的测量挑战也呈指数级增长。本文将深入探讨如何利用示波器准…...

惠来海康医院眼科母亲节:愿岁月温柔,护她眼底有光

惠来海康医院眼科母亲节&#xff1a;愿岁月温柔&#xff0c;护她眼底有光五月浅夏&#xff0c;暖意氤氲&#xff0c;当康乃馨的芬芳漫过街巷&#xff0c;母亲节便载着满心敬意如期而至。母亲&#xff0c;是岁月里最温柔的守望者&#xff0c;用一双眼眸&#xff0c;藏下对我们所…...

EDA验证与调试:从学术理论到工业落地的核心挑战与自动化未来

1. 从互联网先驱到EDA专家&#xff1a;Andreas Veneris的跨界之路在半导体设计这个高度专业化的领域&#xff0c;Andreas Veneris的经历显得格外独特。他既是多伦多大学电气与计算机工程及计算机科学系的教授&#xff0c;又是EDA&#xff08;电子设计自动化&#xff09;公司Ven…...

科技与科学领域每日新闻摘要-2026-05-12

科技与科学领域每日新闻摘要 日期: 2026年5月12日 1. Nature发布2026年最值得关注的七大技术 核心要点: 《自然》杂志发表2026年最值得关注的七项关键技术&#xff0c;包括异种器官移植、AI天气预报、可控核聚变、光学显微脑图谱、mRNA疗法、高精度天文成像和量子计算。这些技…...

国产能量阀品牌推荐

在国产能量阀品牌中&#xff0c;天津水阀机械有限公司&#xff08;简称“天津水阀”&#xff09;无疑是一颗耀眼的明星。它以卓越的产品品质、先进的技术和广泛的应用案例&#xff0c;在行业内树立了良好的口碑。下面&#xff0c;让我们深入了解一下这个值得推荐的品牌。 一、…...

Windows NFSv4.1客户端终极指南:让Windows系统无缝访问NFS服务器

Windows NFSv4.1客户端终极指南&#xff1a;让Windows系统无缝访问NFS服务器 【免费下载链接】ms-nfs41-client NFSv4.1 Client for Windows 项目地址: https://gitcode.com/gh_mirrors/ms/ms-nfs41-client 想要在Windows系统中像操作本地文件一样访问远程NFS服务器吗&a…...