springmvc http请求,支持get,post,附件传输和参数传输
主要解决http请求支持get,post,put,delete等常规方法,支持@RequestParam,@RequestBody,@PathVariable等参数格式传输,支持传输附件同时传递参数等,主体代码如下:
package mes.client.action;import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSON;
import mes.client.pojo.po.CommonEntityPo;
import mes.client.pojo.vo.ResponseInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;public class MesMomConnectAction {private static Logger logger = LoggerFactory.getLogger(MesMomConnectAction.class);/*** 无请求体body,向指定URL发送方法的请求** @param url 发送请求的URL* @return URL 所代表远程资源的响应结果*/public static ResponseInfo getHttpParamReq(String url,String requestMethodType) {StringBuilder result = new StringBuilder();BufferedReader in = null;HttpURLConnection connection = null;try {URL getUrl = new URL(url);// 打开和URL之间的连接connection = (HttpURLConnection) getUrl.openConnection();// 在connect之前,设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");connection.setRequestProperty("Charsert", "UTF-8");//添加必须的头部信息addHeader(connection);// 配置本次连接的Content-type,form表单是"application/x-www-form-urlencoded",json是"application/json"等// 根据需求自己调整Content-typeconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 设置连接主机服务器的超时时间:15000毫秒connection.setConnectTimeout(15000);// 设置读取远程返回的数据时间:60000毫秒connection.setReadTimeout(60000);// 设置连接方式:getconnection.setRequestMethod(requestMethodType);// 建立实际的连接,可不写,注意connection.getOutputStream会隐含的进行connect。connection.connect();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {result.append(line);}ResponseInfo responseInfo = JSON.parseObject(result.toString(), ResponseInfo.class);if(responseInfo.getStatusCode() == null){return getFailResponse(result.toString());}return responseInfo;} catch (Exception e) {logger.error("调用MES4.0接口异常",e);return getExceptionResponse(e);}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}if (connection != null) {//关闭连接connection.disconnect();}} catch (Exception e2) {e2.printStackTrace();}}}/** * @description: get请求* @date: 2023-10-16 16:58:30 * @param url * @return ResponseInfo */public static ResponseInfo sendGet(String url){return getHttpParamReq(url,"GET");}/** * @description:方法说明* @date: 2023-10-16 15:42:33 * @param url * @return ResponseInfo */public static ResponseInfo sendDelete(String url) {return getHttpParamReq(url,"DELETE");}/** * @description: post请求* @date: 2023-10-16 17:04:07 * @param url * @param param * @return ResponseInfo */public static ResponseInfo sendPost(String url, CommonEntityPo param){return getHttpBodyReq(url,param,"POST");}/** * @description: put请求* @date: 2023-10-16 17:05:05 * @param url * @param param * @return ResponseInfo */public static ResponseInfo sendPut(String url, CommonEntityPo param){return getHttpBodyReq(url,param,"PUT");}/*** 有请求体body,向指定 URL 发送方法的请求** @param url 发送请求的 URL* @param param 请求参数。* @return 所代表远程资源的响应结果*/public static ResponseInfo getHttpBodyReq(String url, CommonEntityPo param, String requestMethodType) {BufferedReader in = null;InputStream inputStream = null;HttpURLConnection connection = null;StringBuilder result = new StringBuilder();try {URL postUrl = new URL(url);// 打开和URL之间的连接connection = (HttpURLConnection) postUrl.openConnection();// 在connect之前,设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");connection.setRequestProperty("Charsert", "UTF-8");//添加一些必要的请求头信息addHeader(connection);//connection.setRequestProperty("Authorization","Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiUlR5WGJ0Q05aaS1fUkVKSGUwNHNEd2RYaTNVSHRLOWZoWndXdGdPdWdNIn0.eyJleHAiOjE2OTc0MzM5NDksImlhdCI6MTY5NzAwMTk0OSwiYXV0aF90aW1lIjoxNjk2NzYwOTcxLCJqdGkiOiJiMjcyYzM2My1kMDQ1LTRhMTAtOTc5Ni0xZGE0ZmYwNDkxYTkiLCJpc3MiOiJodHRwOi8vaWRtLWRldi5zdW53b2RhLWV2Yi5jb20vYXV0aC9yZWFsbXMvc3RhbmRhcmQiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmIxOTE4NWYtODcxZi00NTk1LWIxZTUtYTIwZTQ1MzcyZjQ3IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibnRzLWZyb250LXRlc3QiLCJub25jZSI6Ijc3MjBkM2QyLTg3NDQtNDI3Yy1iMzBhLTE5YWU2ZDM5NzY3NiIsInNlc3Npb25fc3RhdGUiOiJhNDJlNzU0ZC04MmRjLTQxNTgtOWQyYi1iZWZkNzNmMGI4NzUiLCJhY3IiOiIwIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoi6IuP5pWPIiwicHJlZmVycmVkX3VzZXJuYW1lIjoieHdkMTYiLCJnaXZlbl9uYW1lIjoi6IuP5pWPIiwibG9jYWxlIjoiemgtQ04ifQ.AUnf5meZWqYNYbfbzyqY3C9WoiL-ISCoVebvtJV-1EF8iQe2FXVEE22CLKnTvHBEoY-W62F8LtG3eW3B5LP54WBXq0JyxnMSLTjqZWMfvYmxNLfjO3rcviK9jAqqxrvLy1IR4ZVFz8ez4ThfCr3TrbammQvZgxF1jie_hx_-3RTiLTra1qyTUj8CrFRaVDBvWTt8nDu6FsRBAkqImPgZ3Jdhf-WDeVlwOkDCGPd5cUQ9KAQs2JUMY4H_jC9cgcSpQuUjNOQOnu1lnYjnsREswR7iBNSkaW6DlRry-HhD8FRs1QLOwKGcgFCBU7O9O-NCH8EyrZOriSpiPaElE2-i2Q");connection.setConnectTimeout(15000);connection.setReadTimeout(60000);// 发送POST请求必须设置如下两行,参数要放在http正文内connection.setDoOutput(true);connection.setDoInput(true);// 默认是 GET方式connection.setRequestMethod(requestMethodType);// Post 请求不使用缓存connection.setUseCaches(false);// 配置连接的Content-type,form表单是"application/x-www-form-urlencoded",json是"application/json"等connection.setRequestProperty("Content-Type", "application/json");connection.connect();//参数处理if(param != null){//打印接口入参logger.info("post请求接口入参:{}",JSON.toJSONString(param.getData()));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));writer.write(JSON.toJSONString(param.getData()));writer.close();}// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {result.append(line);}ResponseInfo responseInfo = JSON.parseObject(result.toString(), ResponseInfo.class);if(responseInfo.getStatusCode() == null){return getFailResponse(result.toString());}return responseInfo;} catch (Exception e) {logger.error("调用MES4.0接口异常",e);return getExceptionResponse(e);} finally {try {if (in != null) {in.close();}if(inputStream != null){inputStream.close();}if (connection != null) {//关闭连接connection.disconnect();}} catch (IOException ex) {ex.printStackTrace();}}}/*public static void main(String[] args) throws IOException {//=========================================邮箱==================================================List<Map<String, Object>> files = new ArrayList<>();Map<String, Object> map = new HashMap();File file = new File("C:\\Users\\86188\\Desktop\\t1.png");map.put("name", "t1.png");map.put("file", file);files.add(map);Map<String, Object> param = new HashMap();param.put("data", "data");sendFileUrl("http://127.0.0.1:8080/sendReport", files, param);}*//** * @description: 有附件和参数的发送方法的请求(调用方式参考实例如上方法)* @date: 2023-10-23 10:41:40 * @param actionUrl :请求链接url* @param files : 附件* @param param :请求参数* @return ResponseInfo */public static void sendFileUrl(String actionUrl, List<Map<String, Object>> files, Map<String, Object> param){HttpURLConnection conn = null;DataOutputStream outStream = null;try {final String NEWLINE = "\r\n";String BOUNDARY = java.util.UUID.randomUUID().toString();String PREFIX = "--", LINEND = "\r\n";String MULTIPART_FROM_DATA = "multipart/form-data";String CHARSET = "UTF-8";URL uri = new URL(actionUrl);conn = (HttpURLConnection) uri.openConnection();conn.setConnectTimeout(15000);conn.setReadTimeout(60000);conn.setDoInput(true);// 允许输入conn.setDoOutput(true);// 允许输出conn.setUseCaches(false);conn.setRequestMethod("POST"); // Post方式conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Charsert", "UTF-8");conn.setRequestProperty("Accept", "application/json;charset=UTF-8");conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY);outStream = new DataOutputStream(conn.getOutputStream());// 获取表单中上传控件之外的控件数据,写入到输出流对象(根据上面分析的抓包的内容格式拼凑字符串);if (param != null && !param.isEmpty()) { // 这时请求中的普通参数,键值对类型的,相当于上面分析的请求中的username,可能有多个for (Map.Entry<String, Object> entry : param.entrySet()) {String key = entry.getKey(); // 键,相当于上面分析的请求中的usernameObject value = param.get(key); // 值,相当于上面分析的请求中的sdafdsaoutStream.writeBytes(PREFIX + BOUNDARY + NEWLINE); // 像请求体中写分割线,就是前缀+分界线+换行outStream.writeBytes("Content-Disposition: form-data; "+ "name=\"" + key + "\"" + NEWLINE); // 拼接参数名,格式就是Content-Disposition: form-data; name="key" 其中key就是当前循环的键值对的键,别忘了最后的换行outStream.writeBytes(NEWLINE); // 空行,一定不能少,键和值之间有一个固定的空行outStream.write(value.toString().getBytes("UTF-8")); // 将值写入,用字节流防止乱码// 或者写成:dos.write(value.toString().getBytes(charset));outStream.writeBytes(NEWLINE); // 换行}}// 发送文件数据if (files != null)for (Map<String, Object> file : files) {StringBuilder sb1 = new StringBuilder();sb1.append(PREFIX);sb1.append(BOUNDARY);sb1.append(LINEND);sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""+ file.get("name") + "\"" + LINEND);sb1.append("Content-Type: application/octet-stream; charset="+ CHARSET + LINEND);sb1.append(LINEND);outStream.write(sb1.toString().getBytes("utf-8")); //getBytes()不加utf-8 传输中文名附件时,接收附件的地方解析文件名会乱码InputStream is = new FileInputStream((File) file.get("file"));byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) {outStream.write(buffer, 0, len);}is.close();outStream.write(LINEND.getBytes());}// 请求结束标志byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();outStream.write(end_data);outStream.flush();// 得到响应码int res = conn.getResponseCode();//if (res == 200) {InputStream in = conn.getInputStream();InputStreamReader isReader = new InputStreamReader(in,"UTF-8");BufferedReader bufReader = new BufferedReader(isReader);String line = "";String data = "";while ((line = bufReader.readLine()) != null) {data += line;}logger.info("读取后最后结果:" + data);//}} catch (Exception e) {e.printStackTrace();} finally {try {//关闭流if(outStream != null){outStream.close();}//关闭连接if(conn != null){conn.disconnect();}} catch (IOException e) {e.printStackTrace();}}}//multipartFile格式文件发送public static void sendMultipartFileUrl(String actionUrl, MultipartFile file, Map<String, Object> param){HttpURLConnection conn = null;DataOutputStream outStream = null;try {final String NEWLINE = "\r\n";String BOUNDARY = java.util.UUID.randomUUID().toString();String PREFIX = "--", LINEND = "\r\n";String MULTIPART_FROM_DATA = "multipart/form-data";String CHARSET = "UTF-8";URL uri = new URL(actionUrl);conn = (HttpURLConnection) uri.openConnection();conn.setConnectTimeout(15000);conn.setReadTimeout(60000);conn.setDoInput(true);// 允许输入conn.setDoOutput(true);// 允许输出conn.setUseCaches(false);conn.setRequestMethod("POST"); // Post方式conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Charsert", "UTF-8");conn.setRequestProperty("Accept", "application/json;charset=UTF-8");conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY);outStream = new DataOutputStream(conn.getOutputStream());// 获取表单中上传控件之外的控件数据,写入到输出流对象(根据上面分析的抓包的内容格式拼凑字符串);if (param != null && !param.isEmpty()) { // 这时请求中的普通参数,键值对类型的,相当于上面分析的请求中的username,可能有多个for (Map.Entry<String, Object> entry : param.entrySet()) {String key = entry.getKey(); // 键,相当于上面分析的请求中的usernameObject value = param.get(key); // 值,相当于上面分析的请求中的sdafdsaoutStream.writeBytes(PREFIX + BOUNDARY + NEWLINE); // 像请求体中写分割线,就是前缀+分界线+换行outStream.writeBytes("Content-Disposition: form-data; "+ "name=\"" + key + "\"" + NEWLINE); // 拼接参数名,格式就是Content-Disposition: form-data; name="key" 其中key就是当前循环的键值对的键,别忘了最后的换行outStream.writeBytes(NEWLINE); // 空行,一定不能少,键和值之间有一个固定的空行outStream.write(value.toString().getBytes("UTF-8")); // 将值写入,用字节流防止乱码// 或者写成:dos.write(value.toString().getBytes(charset));outStream.writeBytes(NEWLINE); // 换行}}// 发送文件数据if (file != null){StringBuilder sb1 = new StringBuilder();sb1.append(PREFIX);sb1.append(BOUNDARY);sb1.append(LINEND);sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""+ file.getOriginalFilename() + "\"" + LINEND);sb1.append("Content-Type: application/octet-stream; charset="+ CHARSET + LINEND);sb1.append(LINEND);outStream.write(sb1.toString().getBytes("utf-8")); //getBytes()不加utf-8 传输中文名附件时,接收附件的地方解析文件名会乱码InputStream is = file.getInputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) {outStream.write(buffer, 0, len);}is.close();outStream.write(LINEND.getBytes());}// 请求结束标志byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();outStream.write(end_data);outStream.flush();// 得到响应码int res = conn.getResponseCode();//if (res == 200) {InputStream in = conn.getInputStream();InputStreamReader isReader = new InputStreamReader(in,"UTF-8");BufferedReader bufReader = new BufferedReader(isReader);String line = "";String data = "";while ((line = bufReader.readLine()) != null) {data += line;}logger.info("读取后最后结果:" + data);//}} catch (Exception e) {e.printStackTrace();} finally {try {//关闭流if(outStream != null){outStream.close();}//关闭连接if(conn != null){conn.disconnect();}} catch (IOException e) {e.printStackTrace();}}}/** * @description: 需要额外添加一些请求头信息* @date: 2023-10-11 14:42:07 */private static void addHeader(HttpURLConnection connection){//针对一些第三方系统加密header}/** * @description: 返回请求异常信息* @date: 2023-10-15 17:43:36 * @param e * @return ResponseInfo */private static ResponseInfo getExceptionResponse(Exception e){ByteArrayOutputStream baos = new ByteArrayOutputStream();e.printStackTrace(new PrintStream(baos));String failMsg = baos.toString();return getFailResponse(failMsg);}/** * @description: 封装返回信息结果* @date: 2023-10-19 19:44:23 * @param failMsg * @return ResponseInfo */private static ResponseInfo getFailResponse(String failMsg){ResponseInfo responseInfo = new ResponseInfo();responseInfo.setStatusCode(400);responseInfo.setMessage(failMsg);return responseInfo;}
}
相关文章:
springmvc http请求,支持get,post,附件传输和参数传输
主要解决http请求支持get,post,put,delete等常规方法,支持RequestParam,RequestBody,PathVariable等参数格式传输,支持传输附件同时传递参数等,主体代码如下: package mes.client.action;import cn.hutool.crypto.digest.DigestUt…...
linux性能分析(七)CPU性能篇(二)怎么理解平均负载
一 怎么理解平均负载 ① 如何查看平均复杂 查看系统负载的命令: top、uptime、w、cat /proc/loadavg、tload /proc/loadavg 思考: uptime每列输出的含义?重点: 当前时间、系统运行时间、正在登录用户数、平均负载 ② 思考࿱…...
PostgreSQL12中浮点数输出算法优化带来的小问题
最近碰到同事发来这样两个SQL,开发反馈输出的结果异常。 bill# select 0.1284*100::float;?column? --------------------12.839999999999998 (1 row)bill# select (0.1284*100)::float;float8 --------12.84 (1 row) 乍一看其实能看出明显的区别,由于…...
Hive安装配置笔记
版本说明 hadoop-3.3.6(已安装) mysql-8(已安装) hive-3.1.3 将hive解压到对应目录后做如下配置: 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…...
前端数据可视化之【Echarts下载使用】
目录 🌟下载🌟浏览器引入🌟模块化引入 🌟使用🌟基本使用步骤 🌟绘制一个简单的图表🌟写在最后 🌟下载 🌟浏览器引入 官网下载界面:官方网站 或 Echarts中文…...
本机计算机上的mysql启动后停止
本机计算机上的mysql启动后停止 原因:mysql5.0和mysql8.0配置不同 把my.ini改成以下设置然后再重新 mysqld --initialize-insecure --usermysql然后再启动 net start mysqlmysql8.0 下面的路劲可自定义 [client] default-character-setutf8 [mysql] default-cha…...
Java中ReentrantLock测试线程的安全
使用场景 当需要在多线程环境下保证共享资源的安全访问时,可以使用Java中的ReentrantLock来实现线程安全。ReentrantLock是一个可重入的互斥锁,它提供了与synchronized关键字类似的功能,但更加灵活和扩展性强。 下面是一个使用ReentrantLoc…...
Vue-dvadmin-d2-crud-plus-常用配置-row-handle-columns-options
文章目录 1.row-handle columnHeader width minWidth fixed align renderHeader edit view remove remove.confirm remove.confirmTitle remove.confirmText custom 范例1 范例2 2.columns title key width minWidth fixed renderHeader sortable sortMethod sortBy sortOrders…...
【OpenCV实现图像的算数运算,性能测试和优化,改变颜色空间】
文章目录 OpenCV功能概要图像的算数运算性能测试和优化改变颜色空间对象追踪 OpenCV功能概要 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…...
多级缓存入门
文章目录 什么是多级缓存JVM进程缓存环境准备安装MySQL导入Demo工程导入商品查询页面 初识Caffeine Lua语法初识Lua第一个lua程序变量和循环Lua的数据类型声明变量循环 条件控制、函数函数条件控制 多级缓存安装OpenRestyOpenResty快速入门反向代理流程OpenResty监听请求编写it…...
CentOS卸载LVM磁盘的方法
在客户环境上遇到一个问题,本身的磁盘满了,需要把没有用的lvm逻辑卷卸载掉,然后挂上去,下面记录一下过程。 卸载原磁盘 umount /data # 如果/data目录正在被其他进程使用中,则使用fuser强制关闭,然后Umou…...
ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别
ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别 Springboot是什么? ChatGPT: Spring Boot是一个用于构建Java应用程序的开源框架,它是Spring Framework的一部分,但旨在简化Spring应用程序的开发。Sprin…...
智能振弦传感器:参数智能识别技术的重要科技创新
智能振弦传感器:参数智能识别技术的重要科技创新 智能振弦传感器是一种能够自动识别传感器参数的高科技产品。它的研发得益于河北稳控科技的不断创新和努力,其电子标签专用读数模块模块TR01将传感器生产和标定过程实现了自动化。该模块将温度电阻两芯线…...
tooltip实现悬停内容染色
一: 通过highlight.js项目实现对json字符串的染色高亮 此项目是jsp文件,并且引用了element-ui/highlight.js的组件 二: 实现效果 三: 代码实现 关键点在于成功引入相关的js及css,并且在tooltip渲染时进行数据染色。再将染色后的数据放到v-html中进行页面渲染(关键方…...
“深入探讨Java JUC中的ReentrantLock锁:实现多线程同步与并发控制“
简介 1、从Java5开始,Java提供了一种功能更强大的线程同步机制——通过显式定义同步锁对象来实现同步,在这种机制下,同步锁由Lock对象充当。 2、Lock 提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock允许实…...
Java|学习|多线程
1.多线程的一些概念 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源。 线程:是进程中的单个顺序控制流,是一条执行路径。 单线程:一个进程如果只有一条执行路径࿰…...
【Python机器学习】零基础掌握VotingClassifier集成学习
为什么一些数据预测模型在复杂场景下表现不如预期? 在当今数据驱动的世界中,企业和研究者面临着如何从大量数据中提取有价值信息的挑战。假设一个电商公司想要通过用户行为数据预测产品销量,通常会使用单一的算法模型,如逻辑回归、随机森林或朴素贝叶斯。但问题来了,如果…...
深入了解JavaScript中的AJAX和HTTP请求
在现代Web开发中,AJAX(Asynchronous JavaScript and XML)和HTTP请求被广泛应用于实现动态交互式网页。本文将深入探讨AJAX的概念、工作原理以及使用方法。 什么是AJAX? AJAX是一种利用JavaScript和HTTP请求与服务器进行异步通信的…...
第87步 时间序列建模实战:LSTM回归建模
基于WIN10的64位系统演示 一、写在前面 这一期,我们介绍大名鼎鼎的LSTM回归。 同样,这里使用这个数据: 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal…...
GB/T28181协议介绍
GB/T28181协议介绍 文章目录 GB/T28181协议介绍总体介绍GB/T28181基本结构GB/T28181关键协议流程设备注册设备目录查询实时视频播放流程 GB/T28181协议总结 说到GB/T28181协议,如果你是从事视频监控领域的工作,那对他一定不陌生,在公共安全、…...
TensorBoard命令找不到?别慌,用pip install tensorboard和tensorflow两步搞定
TensorBoard命令找不到?三步彻底解决环境配置难题 刚接触深度学习的新手们,第一次在终端输入tensorboard --logdirlogs时,大概率会遇到那个令人沮丧的报错:"tensorboard: command not found"。这就像学开车时发现方向盘…...
Qt + OpenGL实战:手把手教你打造一个可交互的3D点云数据查看器(附CSV加载)
Qt OpenGL实战:打造工业级3D点云可视化工具全流程解析 在激光雷达测绘、三维重建和工业检测领域,点云数据的可视化一直是工程师面临的痛点。传统方案要么依赖昂贵的专业软件,要么需要从零造轮子实现OpenGL底层渲染。本文将展示如何基于Qt和…...
magnetW磁力聚合搜索工具:一站式资源发现神器
magnetW磁力聚合搜索工具:一站式资源发现神器 【免费下载链接】magnetW [已失效,不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW 磁力搜索工具magnetW是一款基于Electron框架开发的跨平台桌面应用,专为技术爱好者和普…...
PUBG终极雷达系统免费搭建:从战场盲人到战术大师的完整指南
PUBG终极雷达系统免费搭建:从战场盲人到战术大师的完整指南 【免费下载链接】PUBG-maphack-map this is a working copy online-map from jussihi/PUBG-map-hack, use nodejs webserver instead of firebase. 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-m…...
专业无人机日志分析工具:UAV Log Viewer 让飞行数据分析更简单高效
专业无人机日志分析工具:UAV Log Viewer 让飞行数据分析更简单高效 【免费下载链接】UAVLogViewer An online viewer for UAV log files 项目地址: https://gitcode.com/gh_mirrors/ua/UAVLogViewer 无人机飞行日志分析是每个飞手和专业团队必须掌握的技能&a…...
终极风扇控制解决方案:3步实现Windows系统智能温控管理
终极风扇控制解决方案:3步实现Windows系统智能温控管理 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...
workout-cool项目实战:构建自动化运动数据流,打通健康管理与效率工具
1. 项目概述与核心价值 最近在健身圈和开发者社区里,一个叫“workout-cool”的项目热度悄然攀升。乍一看这个标题,你可能会觉得它只是一个简单的健身记录工具,但当你真正深入进去,会发现它远不止于此。作为一个长期在健康科技和效…...
基于大语言模型构建智能思考伙伴:从原理到本地部署实践
1. 项目概述:一个“思考伙伴”的诞生最近在GitHub上看到一个挺有意思的项目,叫“thinking-partner”。光看这个名字,你可能会联想到一个聊天机器人,或者一个简单的问答工具。但当我深入去研究这个由 mortiebiennial49 开源的仓库时…...
基于Node.js与Socket.IO构建开源实时聊天应用:从架构到部署
1. 项目概述:一个为纯净对话而生的开源聊天应用在信息过载的今天,我们每天被各种应用的通知、广告和复杂功能所包围。对于即时通讯这类高频使用的工具,这种“臃肿感”尤为明显。你是否也怀念过早期聊天软件那种简洁、纯粹、专注于信息交换本身…...
Win11Debloat:一键打造纯净高效的Windows 11终极优化指南
Win11Debloat:一键打造纯净高效的Windows 11终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...
