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

Springboo通过http请求下载文件到服务器

这个方法将直接处理从URL下载数据并将其保存到文件的整个过程。下面是一个这样的方法示例:

import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.HttpURLConnection;  
import java.net.URL;  public class Downloader {  public static void downloadAndSave(String urlString, String filePath) {  InputStream in = null;  try {  URL url = new URL(urlString);  HttpURLConnection connection = (HttpURLConnection) url.openConnection();  connection.setRequestMethod("GET");  connection.setUseCaches(false);  connection.setRequestProperty("Content-Type", "application/json"); // 或者其他适当的MIME类型,或者根据需求移除  connection.setConnectTimeout(60000);  connection.setReadTimeout(60000);  // 连接服务器  connection.connect();  // 检查响应码是否为200  if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {  in = connection.getInputStream();  // 使用try-with-resources来自动关闭OutputStream  try (OutputStream out = new FileOutputStream(filePath)) {  byte[] buffer = new byte[4096];  int bytesRead;  // 从输入流中读取数据,并写入到文件输出流中  while ((bytesRead = in.read(buffer)) != -1) {  out.write(buffer, 0, bytesRead);  }  }  // 注意:由于使用了try-with-resources,OutputStream会在这里自动关闭  // 但我们仍然需要确保InputStream在方法结束时被关闭  } else {  System.out.println("Failed to download file: HTTP error code " + connection.getResponseCode());  }  } catch (IOException e) {  e.printStackTrace();  } finally {  // 关闭InputStream  if (in != null) {  try {  in.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  }  // 示例用法  public static void main(String[] args) {  String url = "http://example.com/somefile.txt";  String filePath = "downloaded_file.txt";  downloadAndSave(url, filePath);  }  
}

在这个downloadAndSave方法中,我们首先尝试从给定的URL下载数据。如果HTTP响应码为200(OK),我们就从连接中获取InputStream,并使用try-with-resources语句来自动关闭FileOutputStream,同时将数据从InputStream写入到文件中。无论操作成功与否,我们都会在finally块中关闭InputStream,以确保资源被正确释放。

请注意,我修改了setRequestProperty的键从"Charset"到"Content-Type",但通常对于GET请求来说,设置"Content-Type"并不是必需的,因为它是由请求体(对于GET请求来说,请求体是空的)的媒体类型决定的。然而,如果你正在向服务器发送POST或PUT请求,并包含请求体,那么设置正确的"Content-Type"就非常重要了。在这个例子中,我保留了它,但你可能想要根据实际需求进行调整或移除它。如果你只是想从服务器下载文件,那么通常不需要设置"Content-Type"。

实现文件下载并保存的功能,除了使用HttpURLConnection之外,还有其他几种常见的方法。以下是其中两种方法的示例:

  1. 使用java.net.URL和java.io.FileOutputStream(简化版,无HttpURLConnection)
    注意:这种方法实际上并不直接支持HTTP请求的高级功能(如设置请求头、处理重定向等),但在某些简单的场景下可能足够。对于复杂的HTTP请求,建议使用HttpURLConnection或更高级的库。
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.net.URL;  public class SimpleDownloader {  public static void downloadAndSave(String urlString, String filePath) {  try (URL url = new URL(urlString);  InputStream in = url.openStream(); // 注意:这里使用的是openStream(),它简化了HTTP GET请求  FileOutputStream fos = new FileOutputStream(filePath)) {  byte[] buffer = new byte[4096];  int bytesRead;  while ((bytesRead = in.read(buffer)) != -1) {  fos.write(buffer, 0, bytesRead);  }  } catch (IOException e) {  e.printStackTrace();  }  }  public static void main(String[] args) {  String url = "http://example.com/somefile.txt";  String filePath = "downloaded_file.txt";  downloadAndSave(url, filePath);  }  
}
  1. 使用Apache HttpClient库
    Apache HttpClient是一个功能强大的HTTP客户端库,它提供了比HttpURLConnection更丰富的API和更好的灵活性。要使用HttpClient,你需要先将其添加到你的项目依赖中。

以下是一个使用Apache HttpClient下载文件的示例:

import org.apache.http.client.methods.HttpGet;  
import org.apache.http.impl.client.CloseableHttpClient;  
import org.apache.http.impl.client.HttpClients;  
import org.apache.http.util.EntityUtils;  import java.io.FileOutputStream;  
import java.io.IOException;  public class HttpClientDownloader {  public static void downloadAndSave(String urlString, String filePath) {  try (CloseableHttpClient httpClient = HttpClients.createDefault();  HttpGet httpGet = new HttpGet(urlString);  FileOutputStream fos = new FileOutputStream(filePath)) {  httpClient.execute(httpGet, httpResponse -> {  try (InputStream inputStream = httpResponse.getEntity().getContent()) {  byte[] buffer = new byte[4096];  int bytesRead;  while ((bytesRead = inputStream.read(buffer)) != -1) {  fos.write(buffer, 0, bytesRead);  }  }  return null; // 这里返回null,因为我们不需要HttpResponse的进一步处理  });  } catch (IOException e) {  e.printStackTrace();  }  }  // 注意:上面的代码示例使用了HttpClient的异步执行方式(通过execute方法的lambda表达式),  // 但这实际上并不是异步的,因为lambda表达式内部是同步执行的。  // 对于真正的异步下载,你可能需要使用HttpClient的异步API(如FutureCallback等)。  // 为了简化,这里提供一个更直接的同步下载示例:  public static void downloadAndSaveSync(String urlString, String filePath) throws IOException {  try (CloseableHttpClient httpClient = HttpClients.createDefault();  HttpGet httpGet = new HttpGet(urlString);  FileOutputStream fos = new FileOutputStream(filePath)) {  CloseableHttpResponse response = httpClient.execute(httpGet);  try {  InputStream inputStream = response.getEntity().getContent();  byte[] buffer = new byte[4096];  int bytesRead;  while ((bytesRead = inputStream.read(buffer)) != -1) {  fos.write(buffer, 0, bytesRead);  }  } finally {  response.close();  }  }  }  public static void main(String[] args) {  String url = "http://example.com/somefile.txt";  String filePath = "downloaded_file.txt";  // 使用同步方法  try {  downloadAndSaveSync(url, filePath);  } catch (IOException e) {  e.printStackTrace();  }  }  
}

请注意,上面的downloadAndSave方法实际上并没有以异步方式工作,因为lambda表达式内的代码是同步执行的。我提供了一个名为downloadAndSaveSync的同步方法作为替代,它更直接地展示了如何使用HttpClient进行文件下载。如果你需要真正的异步处理,你应该查看HttpClient的异步API文档。

相关文章:

Springboo通过http请求下载文件到服务器

这个方法将直接处理从URL下载数据并将其保存到文件的整个过程。下面是一个这样的方法示例: import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection…...

使用CSS实现酷炫加载

使用CSS实现酷炫加载 效果展示 整体页面布局 <div class"container"></div>使用JavaScript添加loading加载动画的元素 document.addEventListener("DOMContentLoaded", () > {let container document.querySelector(".container&q…...

【STM32-HAL库】AHT10温湿度传感器使用(STM32F407ZGT6配置i2c)(附带工程下载连接)

一、温湿度传感器&#xff1a; 温湿度传感器是一种能够检测环境中的温度和湿度&#xff0c;并将其转化为电信号输出的装置。它在智能家居、工业自动化、气象监测、农业等领域有着广泛的应用。 原理&#xff1a; 温湿度传感器通常基于不同的物理原理&#xff0c;以下是一些常见…...

深入理解网络通信: 长连接、短连接与WebSocket

在现代网络应用开发中,选择合适的通信方式对于应用的性能、效率和用户体验至关重要。本文将深入探讨三种常见的网络通信方式:长连接、短连接和WebSocket,分析它们的特点、区别以及适用场景。 1. 短连接 © ivwdcwso (ID: u012172506) 1.1 定义 短连接是指客户端和服务器…...

Linux·环境变量与进程地址空间

1. 命令行参数 各位可能见过main函数也是有参数的&#xff0c;只是我们平时写的代码都比较简单&#xff0c;用不到main函数的参数&#xff0c;下面我们看一下main函数的参数是什么又是怎么用的 我们看这样一段代码 其编译运行后的效果是这样的 我们将main函数后面的那两个参数叫…...

MYSQL 乐观锁

乐观锁是一种用于处理并发控制的策略&#xff0c;特别适用于读多写少的场景。在 MySQL 数据库中&#xff0c;乐观锁通常通过版本号或时间戳来实现。下面将详细介绍乐观锁的概念、实现方式以及在 MySQL 中的应用。 1. 乐观锁的概念 乐观锁的基本思想是&#xff1a;在对数据进行…...

SpringCloud入门(十二)全局过滤器和跨域

一、全局过滤器 全局过滤器的作用也是处理一切进入网关的请求和微服务响应&#xff0c;与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义&#xff0c;处理逻辑是固定的&#xff0c;如果我们希望拦截请求&#xff0c;做自己的业务逻辑则没办法实现。而GlobalFilt…...

51单片机系列-按键检测原理

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 独立按键是检测低电平的。 下面我们来看一张对应的电路原理图&#xff1a; 在这张图当中&#xff0c;P1&#xff0c;P2&#xff0c;P3内部都上拉了电阻&#xff0c;但是P0没有&am…...

基于元神操作系统实现NTFS文件操作(五)

1. 背景 本文主要介绍$Root元文件的解析。先介绍元文件的构成及各个部分的结构&#xff0c;然后结合上一篇博文中读取到的元文件内容&#xff0c;对测试磁盘中目标分区的根目录进行展示。 2. $Root元文件解析 &#xff08;1&#xff09;$Root元文件的结构 $Root元文件由两部…...

AutoCAD学习

AutoCAD学习 最基本操作 命令用途说明空格键确认键也可以是重复刚才的命令回车键也是确认键鼠标右键也可以选择确认LINE、L直线命令绘制直线DLI线性尺寸标注DIMLINEAR鼠标滚轮滚动放大缩小视图界面鼠标中键按住移动视图DAL对齐线性标注DIMALIGNED F8 正交模式ORTHOMODE Tab 切换…...

go的一些知识点

一.package 1.新建项目 新建一个itying文件夹&#xff0c;在里面使用命令 就能生成一个go项目。生成一个go.mod 2.调用别的包的代码 按照下面的目录层级生成代码 //clac.go package calcfunc Add(x, y int) int {return x y } func Sub(x, y int) int {return x - y }…...

前端 vue3 对接科大讯飞的语音在线合成API

主要的功能就是将文本转为语音&#xff0c;可以播放。 看了看官方提供的demo&#xff0c;嗯....没看懂。最后还是去网上找的。 网上提供的案例&#xff0c;很多都是有局限性的&#xff0c;我找的那个他只能读取第一段数据&#xff0c;剩下的不读取。 科大讯飞的接口&#xf…...

缺省参数

一、概念 在声明或定义函数时为函数的参数指定一个默认值&#xff0c;调用时&#xff0c;如果对应参数没有传参&#xff0c;则使用其默认值&#xff0c;否则使用指定的实参 void TestFunc(int a 0) {cout<<a<<endl; }int main() {TestFunc(); // 没有传参&am…...

Stable Diffusion绘画 | 来训练属于自己的模型:炼丹启动

经过前面几轮辛苦的准备工作之后&#xff0c;现在开始进入终篇的炼丹环节。 在「上传素材」页面&#xff0c;点击「开始训练」&#xff1a; 可以在「查看进度-进度」中&#xff0c;查看模型训练的整体进度&#xff1a; 求助&#xff01;&#xff01;&#xff01;操作「开始训练…...

08_OpenCV文字图片绘制

import cv2 import numpy as npimg cv2.imread(image0.jpg,1) font cv2.FONT_HERSHEY_SIMPLEXcv2.rectangle(img,(500,400),(200,100),(0,255,0),20) # 1 dst 2 文字内容 3 坐标 4 5 字体大小 6 color 7 粗细 8 line type cv2.putText(img,flower,(200,50),font,1,(0,0,250)…...

【笔记】选择题笔记+数据结构笔记

文章目录 2014 41方法一先序遍历方法二 连通分量是极大连通子图 一个连通图的生成树是一个极小连通子图 无向图的邻接表中&#xff0c;第i个顶点的度为第i个链表中的结点数 邻接表和邻接矩阵对不同的操作各有优势。 最短路径算法: 单源最短路径 已知图G(V,E)&#xff0c;我们…...

浅谈汽车智能座舱如何实现多通道音频

一、引言 随着汽车智能座舱的功能迭代发展&#xff0c;传统的 4 通道、6 通道、8 通道等音响系统难以在满足驾驶场景的需求&#xff0c;未来对于智能座舱音频质量和通道数会越来越高。接下来本文将浅析目前智能座舱如何实现音频功放&#xff0c;以及如何实现多路音频功放方案。…...

系统架构设计师教程 第13章 13.1层次式体系结构概述 笔记

13.1 层次式体系结构概述 分层式体系结构是一种最常见的架构设计方法&#xff0c;能有效地使设计简化&#xff0c;使设计的系统机构清晰&#xff0c;便于提高复用能力和产品维护能力。 层次式体系结构设计是将系统组成一个层次结构&#xff0c;每一层为上层服务&#xff0c;并…...

cnn突破一(先搞定三层反馈神经网络bpnet,c#实现)

惦记cnn很久了&#xff0c;一直搞机器视觉&#xff0c;走不出来&#xff0c;现在megauging已经实现&#xff0c;说明书也写了不少&#xff0c;该突破的突破了&#xff0c;该改进的也改进了&#xff0c;一个心病治好了&#xff0c;有空把人工智能在机器视觉上的延伸&#xff0c;…...

如何创建一个docker,给它命名,且下次重新打开它

1.创建一个新的docker并同时命名 docker run -it --name one ubuntu:18.04 /bin/bash 这时候我们已经创建了一个docker,并且命名为"one" 2.关闭当前docker exit 3.这时docker已经终止了&#xff0c;我们需要使用它要重新启动 docker start one 4.现在可以重新打…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...