【Unity网络编程知识】Unity的 UnityWebRequest相关类学习
1、UnityWebRequest类介绍
UnityWebRequest是一个unity提供的一个模块化的系统类,用于构成HTTP请求和处理HTTP响应,它主要目标是让unity游戏和Web服务端进行交互,它将之前WWW的相关功能都集成在了其中,所以新版本中都建议使用unityWebRequest类来代替WWW类,它在使用上和WWW很类似,主要的区别就是unityWebRequest把下载下来的数据处理单独提取出来了,我们可以根据自己的需求选择对应的数据处理对象来获取数据。
注意:
- UnityWebRequest和www一样,需要配合协同程序使用
- UnityWebRequest和www一样,支持http、ftp、file协议下载或加载资源
- UnityWebRequest能够上传文件到HTTP资源服务器
2、UnityWebRequest常规操作获取数据
2.1 使用Get请求获取文本或二进制数据,UnityWebRequest.Get
StartCoroutine(LoadText());IEnumerator LoadText(){//UnityWebRequest req = UnityWebRequest.Get("ftp://127.0.0.1/xxx.png");//UnityWebRequest req = UnityWebRequest.Get("file://" + Application.streamingAssetsPath + "/test.png");UnityWebRequest req = UnityWebRequest.Get("https://apis.tianapi.com/esports/index?key=569f5d47f6840feced4db412448e44f5&num=10");yield return req.SendWebRequest();//如果处理成功 结果就是成功枚举if(req.result == UnityWebRequest.Result.Success ){//文本 字符串print(req.downloadHandler.text);//字节数组byte[] bytes = req.downloadHandler.data;print(bytes.Length);}else{print("获取失败:" + req.result + req.error + req.responseCode);}}
2.2 使用Get请求获取纹理数据,UnityWebRequestTexture.GetTexture
StartCoroutine(LoadTexture());IEnumerator LoadTexture(){UnityWebRequest req = UnityWebRequestTexture.GetTexture("https://qcloud.dpfile.com/pc/DfcPF0Dzu9D9Qd9Wm3_qdklLIicjzbTkXVl-rKrD1BAXyPEkpUqfdIUZwCbbB1Xz.jpg");yield return req.SendWebRequest();if(req.result == UnityWebRequest.Result.Success){//(req.downloadHandler as DownloadHandlerTexture).texture//DownloadHandlerTexture.GetContent(req);image.texture = DownloadHandlerTexture.GetContent(req);}else{Debug.LogError("获取失败" + req.error + req.result + req.responseCode);}}
2.3 使用Get请求获取AB包数据,UnityWebRequestAssetBundle.GetAssetBundle
IEnumerator LoadAB(){UnityWebRequest req = UnityWebRequestAssetBundle.GetAssetBundle("http://192.168.1.25:8000/HttpServer/lua");req.SendWebRequest();while(!req.isDone){print(req.downloadProgress);print(req.downloadedBytes);yield return 0;}//yield return req.SendWebRequest();if(req.result == UnityWebRequest.Result.Success){//AssetBundle ab = (req.downloadHandler as DownloadHandlerAssetBundle).assetBundle;AssetBundle ab = DownloadHandlerAssetBundle.GetContent(req);print(ab.name);}else{Debug.LogError("获取失败" + req.error + req.result + req.responseCode);}}
3、UnityWebRequest常规操作上传数据
3.1 上传相关数据类,IMuItipartFormSection接口
//IMuItipartFormSection//数据相关类都继承该接口//我们可以用父类装子类List<IMultipartFormSection> datalist = new List<IMultipartFormSection>();
1)MultipartFormDataSection
//1.二进制字节数组datalist.Add(new MultipartFormDataSection(Encoding.UTF8.GetBytes("djadjad")));//2.字符串datalist.Add(new MultipartFormDataSection("dsdadad"));//3.参数名,参数值(字节数组,字符串),编码类型,资源类型(常用)datalist.Add(new MultipartFormDataSection("Name", "ZTT", Encoding.UTF8, "text/..."));datalist.Add(new MultipartFormDataSection("Msg", new byte[1024], "application/..."));
2)MultipartFormFileSection
//1.字节数组datalist.Add(new MultipartFormFileSection(File.ReadAllBytes(Application.streamingAssetsPath + "/test.png")));//2.文件名,字节数组(常用)datalist.Add(new MultipartFormFileSection("FileName.png", File.ReadAllBytes(Application.streamingAssetsPath + "/test.png")));//3.字符串数据,文件名(常用)datalist.Add(new MultipartFormFileSection("123", "test.txt"));//4.字符串数据,编码格式,文件名(常用)datalist.Add(new MultipartFormFileSection("fdfds", Encoding.UTF8, "test.txt"));//5.表单名,字节数组,文件名,文件类型datalist.Add(new MultipartFormFileSection("file", new byte[1024], "test.txt", ""));//6.表单名,字符串数据,编码格式,文件名datalist.Add(new MultipartFormFileSection("file", "dada", Encoding.UTF8, "test.txt"));
3.2 Post发送请求
StartCoroutine(UpLoad());IEnumerator UpLoad(){//准备上传的数据List<IMultipartFormSection> data = new List<IMultipartFormSection>();//键值对相关的 信息 字段数据data.Add(new MultipartFormDataSection("Name", "ZTT"));//PlayerMsg msg = new PlayerMsg();//data.Add(new MultipartFormDataSection("Msg", msg.Writing()));//添加一些文件上传文件//传二进制文件data.Add(new MultipartFormFileSection("test.png", File.ReadAllBytes(Application.streamingAssetsPath + "/test.png")));//传文本文件data.Add(new MultipartFormFileSection("文件字符串内容", "test2.png"));UnityWebRequest req = UnityWebRequest.Post("http://192.168.1.25:8000/HttpServer/", data);req.SendWebRequest();while(!req.isDone){print(req.uploadProgress);print(req.uploadedBytes);yield return null;}print(req.uploadProgress);print(req.uploadedBytes);if(req.result == UnityWebRequest.Result.Success){print("上传成功");//req.downloadHandler.data}}
3. 3 Put上传请求
StartCoroutine(UpLoadPut());IEnumerator UpLoadPut(){UnityWebRequest req = UnityWebRequest.Put("http://192.168.1.25:8000/HttpServer/", File.ReadAllBytes(Application.streamingAssetsPath + "/test.png"));yield return req.SendWebRequest();if(req.result == UnityWebRequest.Result.Success){print("上传成功");}else{}}
4、 UnityWebRequest类的常用方法和变量
1)构造函数
UnityWebRequest req = new UnityWebRequest();
2)请求地址
req.url = "服务器地址";
3)请求类型
req.method = UnityWebRequest.kHttpVerbGET;
4)上传、下载的进度
req.downloadProgress
req.uploadProgress
5)超时设置
req.timeout = 2000;
6)上传、下载的字节数
req.downloadedBytes
req.uploadedBytes
7)重定向次数设置为0表示不进行重定向可以设置次数
req.redirectLimit = 2;
8)状态码、结果、错误内容
req.responseCode
req.result
req.error
9)下载、上传处理对象
req.downloadHandler
req.uploadHandler
5、UnityWebRequest高级操作获取数据
4.1 发送Get请求
// 关键类://1.DownloadHandlerBuffer 用于简单的数据存储,得到对应的2进制数据。//2.DownloadHandlerFile 用于下载文件并将文件保存到磁盘(内存占用少)。//3.DownloadHand1erTexture 用于下载图像。//4.DownloadHandlerAssetBundle 用于提取AssetBundle。//5.DownloadHandlerAudioC1ip 用于下载音频文件。StartCoroutine(DownLoadTex());IEnumerator DownLoadTex(){UnityWebRequest req = new UnityWebRequest("https://qcloud.dpfile.com/pc/DfcPF0Dzu9D9Qd9Wm3_qdklLIicjzbTkXVl-rKrD1BAXyPEkpUqfdIUZwCbbB1Xz.jpg", UnityWebRequest.kHttpVerbGET);//1.DownloadHandlerBuffer//DownloadHandlerBuffer downloadHandlerBuffer = new DownloadHandlerBuffer();//req.downloadHandler = downloadHandlerBuffer;//2.DownloadHandlerFile//print(Application.persistentDataPath);//req.downloadHandler = new DownloadHandlerFile(Application.persistentDataPath + "/downloadFile.jpg");//3.DownloadHand1erTextureDownloadHandlerTexture textureDownLoadHandle = new DownloadHandlerTexture();req.downloadHandler = textureDownLoadHandle;yield return req.SendWebRequest();if(req.result == UnityWebRequest.Result.Success){//获取字节数组//downloadHandlerBuffer.data;//textureDownLoadHandle.textureimage.texture = textureDownLoadHandle.texture;}else{print("获取数据失败" + req.result + req.error + req.responseCode);}}
4.2 自定义实现获取数据DownloadHandler相关类
步骤一、继承DownloadHandlerScript,实现CustomDownLoadFileHandle 类
public class CustomDownLoadFileHandle : DownloadHandlerScript
{//用于保存 本地存储时的路径private string savePath;//用于缓存收到的数据的容器private byte[] cacheBytes;//当前已收到的数据长度private int index = 0;public CustomDownLoadFileHandle():base(){}public CustomDownLoadFileHandle(byte[] bytes) : base(bytes){}public CustomDownLoadFileHandle(string path) : base(){savePath = path;}protected override byte[] GetData(){//return base.GetData();return cacheBytes;}/// <summary>/// 从网络收到数据后 每帧会调用的方法/// </summary>/// <param name="data"></param>/// <param name="dataLength"></param>/// <returns></returns>protected override bool ReceiveData(byte[] data, int dataLength){//return base.ReceiveData(data, dataLength);Debug.Log("收到数据长度:" + data.Length);Debug.Log("收到数据长度dataLength:" + dataLength);data.CopyTo(cacheBytes, index);index += dataLength;return true;}/// <summary>/// 从服务器收到 Content-Length标头时 会调用/// </summary>/// <param name="contentLength"></param>protected override void ReceiveContentLengthHeader(ulong contentLength){//base.ReceiveContentLengthHeader(contentLength);Debug.Log("收到数据长度:" + contentLength);//根据收到的标头 决定字节数组容器的大小cacheBytes = new byte[contentLength];}/// <summary>/// 当消息收完了 会自动调用的方法/// </summary>protected override void CompleteContent(){//base.CompleteContent();Debug.Log("消息收完");//把收到的字节数组 进行自定义处理 我们在这 处理成 存储到本地File.WriteAllBytes(savePath, cacheBytes);}}
步骤二、使用自定义获取数据DownloadHandler相关类
StartCoroutine(DownLoadCustomHandle());IEnumerator DownLoadCustomHandle(){UnityWebRequest req = new UnityWebRequest("https://qcloud.dpfile.com/pc/DfcPF0Dzu9D9Qd9Wm3_qdklLIicjzbTkXVl-rKrD1BAXyPEkpUqfdIUZwCbbB1Xz.jpg", UnityWebRequest.kHttpVerbGET);//使用自定义的下载处理对象 来处理获取到的 2进制字节数组print(Application.persistentDataPath);req.downloadHandler = new CustomDownLoadFileHandle(Application.persistentDataPath + "/CustomHandle.jpg");yield return req.SendWebRequest();if(req.result == UnityWebRequest.Result.Success){print("存储本地成功");}else{print("获取数据失败" + req.result + req.error + req.responseCode);}}
6、UnityWebRequest高级操作上传数据
6.1 发送Post请求
// 注意://由于UnityWebRequest类的常用操作中//上传数据相关内容已经封装的很好了//我们可以很方便的上传参数和文件//我们使用常用操作已经能够满足常用需求了//所以以下内容主要做了解//UploadHandler相关类//1.UploadHandlerRaw 用于上传字节数组StartCoroutine(UpLoad());//2.UploadHandlerFile 用于上传文件IEnumerator UpLoad(){UnityWebRequest req = new UnityWebRequest("http://192.168.1.25:8000/HttpServer/", UnityWebRequest.kHttpVerbPOST);//1.UploadHandlerRaw 用于上传字节数组//byte[] bytes = Encoding.UTF8.GetBytes("13131344");//req.uploadHandler = new UploadHandlerRaw(bytes);//req.uploadHandler.contentType = "类型/细分类型";//2.UploadHandlerFile 用于上传文件req.uploadHandler = new UploadHandlerFile(Application.streamingAssetsPath + "/test.png");yield return req.SendWebRequest();print(req.result);}
相关文章:
【Unity网络编程知识】Unity的 UnityWebRequest相关类学习
1、UnityWebRequest类介绍 UnityWebRequest是一个unity提供的一个模块化的系统类,用于构成HTTP请求和处理HTTP响应,它主要目标是让unity游戏和Web服务端进行交互,它将之前WWW的相关功能都集成在了其中,所以新版本中都建议使用unit…...
STM32实战指南——DHT11温湿度传感器驱动开发与避坑指南
知识点1【DHT11的概述】 1、概述 DHT是一款温湿度一体化的数字传感器(无需AD转换)。 2、驱动方式 通过单片机等微处理器简单的电路连接就能实时采集本地湿度和温度。DHT11与单片机之间采用单总线进行通信,仅需要一个IO口。 相对于单片机…...
SVG 与 Canvas 技术调研对比
在 画布 中进行 大量矩形框绘制 时,SVG 和 Canvas 都是可行的技术方案,但它们适用于不同的场景,技术特性也有明显区别。下面我从性能、灵活性、可维护性、适用场景等方面做一个系统性的对比,帮助你做出更合适的选择。 ᾞ…...
Ubuntu 远程桌面配置指南
概述: 本文主要介绍在Ubuntu 22.04中通过VNC实现远程连接的方法。首先需安装图形化界面和VNC工具x11vnc,设置开机启动服务;然后在Windows客户端用VNC Viewer通过局域网IP和端口5900连接。 总结: 一、VNC配置与安装 安装图形化界面 在Ubuntu 22.04中需先安装: sudo apt …...
146. LRU 缓存
一、题目 二、思路 题目要求 O(1) 的平均时间复杂度运行 -> 使用Map空间换时间 Map<Integer, Node>Map 通过 key 直接找到对应节点 getNode(key) -> Node记得只要查过该节点之后就应该把该节点放到最前面 pushFront(Node)put 元素后,在map中添加&…...
微信学习之导航功能
先看这个功能的效果: 然后开始学习吧。 一、我们这里用的是vant的Grid控件,首先我们导入: { "usingComponents": {"van-search": "vant/weapp/search/index","my-swiper":"../../components…...
MySQL替换瀚高数据库报错: TO_DAYS()不存在(APP)
文章目录 环境症状问题原因解决方案报错编码 环境 系统平台:中标麒麟(海光)7,中标麒麟(飞腾)7 版本:4.5 症状 MySQL替换为瀚高数据库进行应用系统适配报错:TO_DAYS()不…...
FPGA:高速接口JESD204B以及FPGA实现
本文将先介绍JESD204B高速接口的基本概念和特性,然后详细说明如何基于Xilinx Kintex-7系列FPGA实现JESD204B高速接口。 一、JESD204B高速接口介绍 JESD204B是由JEDEC(固态技术协会)制定的一种高速串行通信标准,主要用于数据转换器…...
HarmonyOS Navigation组件深度解析与应用实践
HarmonyOS Navigation组件深度解析与应用实践 一、组件架构与核心能力 HarmonyOS Navigation组件作为路由导航的根视图容器,采用三层架构设计: 标题层:支持主副标题配置,提供Mini/Free/Full三种显示模式内容层:默认…...
C#中的ThreadStart委托
ThreadStart 委托: ThreadStart 是 .NET 中的一个内置委托类型,表示无参数且无返回值的方法。其定义如下: public delegate void ThreadStart(); 通常用于定义线程的入口方法。 List<ThreadStart>: 这是一个泛型集合&…...
Spring boot 集成 Knife4j
knife4j官网:https://doc.xiaominfo.com/docs/quick-start 1. 引入Knife4j相关依赖 <!-- knife4j--> <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version…...
基于Java在高德地图面查询检索中使用WGS84坐标的一种方法-以某商场的POI数据检索为例
前言 随着移动互联网的飞速发展,基于位置的服务(LBS)需求日益增长,越来越多的应用需要从地图中检索特定区域内的地理信息,例如商业场所、公共服务设施等。商场作为城市商业活动的重要载体,其周边的地理信息…...
6K型护套连接器DLJ0601(2000)-00
6K型护套连接器DLJ0601(2000)-00简介 6K型护套连接器DLJ0601(2000)-00是一种用于电气连接的组件,广泛应用于工业设备、通信系统和电子设备中。该连接器设计紧凑,具有高可靠性和耐用性,适用于多种环境条件下的电气连接需求。 主要特点 高可…...
Hexo的Next主题的Config文件内方便修改的参数(Chat-Gpt)
这是对 Hexo 的 Next 主题 _config.yml 文件各部分配置项的中文解释,帮助你更方便地进行定制: 🚀 核心设置 cache / minify cache.enable: 启用缓存,加快生成速度。minify: 是否压缩生成的 HTML/CSS/JS。 custom_file_path 自…...
【three】给立方体的每个面加载不同贴图
效果图: 主要代码: initCube() {let _this thisconst geometry new Three.BoxGeometry(1, .3, .5)let TextureLoader new Three.TextureLoader()let mater1TextureLoader.load(require(/assets/images/bg2.jpg),function (texture){console.log(tex…...
vscode怎么关闭自动定位文件
关闭自动定位文件功能 方式1 在设置中搜索: explorer.autoReveal 方式2 直接在settings.json中增加"explorer.autoReveal": false 添加类似jetbrains IDE的文件定位功能 可以直接安装插件市场搜索niushuaibing.vs-location, 安装后会有文件定位按钮, 点击后即可…...
2025-5-19Vue3快速上手
1、toRefs和toRef 当解构一个响应式对象(如 reactive 创建的对象)时,直接解构会失去响应性,此时可用 toRefs或toRef 保持响应性 toRef 的核心作用是将对象的属性转换为 ref,保持与原属性的双向绑定,无论原…...
HDMI 屏幕 电脑HDMI HDMI采集卡的关系
一、HDMI接口方向性原理 普通设备的HDMI接口方向: 电脑的HDMI接口:无论是显卡还是主板上的HDMI,均为输出端(信号源),只能向外发送视频信号,无法接收输入信号。 显示器的HDMI接口:均…...
JESD204 ip核使用与例程分析(二)
JESD204 ip核使用与例程分析(二) JESD204时钟方案专用差分时钟对例程分析jesd204_0_transport_layer_demapperjesd204_0_sig_chkjesd204_0_clockingjesd204_0 ip核port寄存器AXI-LITE寄存器配置jesd204_phy ip核JESD204时钟方案 图3-1所示为最通用、灵活的时钟解决方案。在图…...
如何使用VCS+XA加密verilog和spice网表
如果要交付verilog,但是需要对方进行VCS仿真,那么可以用以下方法: 一、基于编译指令的局部加密 适用场景:需精确控制加密范围(如仅加密核心算法或敏感逻辑)。 实现步骤: 代码标注…...
Grafana之Dashboard(仪表盘)
在前面的小节中介绍了Grafana中4中常用的可视化面板的使用,通过在面板中使用PromQL表达式,Grafana能够方便的将Prometheus返回的数据进行可视化展示。例如,在展示主机CPU使用率时,我们使用了如下表达式: 1 - (avg(ira…...
AOSP 中常见的键值对存储方式全解析(适用于系统开发与应用开发)
在 Android 系统开发(AOSP)中,键值对(Key-Value)存储是一种基础且广泛使用的数据持久化方式。从系统属性、用户设置,到应用配置,都依赖于这种结构的存储方式。本文将全面梳理 AOSP 中主流的键值…...
集合进阶2
Java不可变集合、Stream流与方法引用深度解析 一、不可变集合(Immutable Collections)进阶指南 1.1 不可变集合核心特性 防御性编程:防止外部修改数据(如传递集合给第三方库时)线程安全:天然支持多线程读…...
eMMC深度解析:嵌入式多媒体卡的硬件电路设计要点
一、eMMC 技术深度解析 1.定义与背景 eMMC(Embedded Multi Media Card)是一种专为嵌入式系统设计的非易失性存储解决方案,它将 NAND 闪存、主控芯片和接口协议封装在一个 BGA(Ball Grid Array)封装中。其核心目标是简…...
【SPIN】PROMELA语言编程入门同步机制(SPIN学习系列--4)
同步机制 PROMELA 不包含信号量、锁或监控器等常见的同步原语,而是通过语句的**可执行性(executability)**概念来建模同步机制。计算机系统的架构限制了同步机制的设计:本章主要介绍适用于共享内存系统的同步机制,第7…...
整数的个数
【描述】 给定k(1< k < 100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。 【输入】 输入有两行:第一行包含一个正整数kÿ…...
AWS EKS IP 耗尽:原因、解决方案和最佳实践
想象一下,您的 AWS EKS 集群在生产环境中运行顺畅,所有 CI/CD 管道运行正常,服务优雅地扩展,一切都像自动驾驶模式一样。——直到有一天,新的 Pod 无法启动。 您深入研究 kubectl get pods 命令,发现一堆 P…...
艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关通讯案例
艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关通讯案例 在现代工业自动化控制系统中,艾默生流量计因其高精度、稳定性和易用性而备受青睐。然而,为了实现与不同协议设备之间的无缝通信,经常需要借助专业的通讯网关进行协议转换。本文将…...
Python测试单例模式
单例模式的核心思想 单例模式确保一个类只有一个实例,并提供一个全局访问点。这在需要控制资源访问(如配置文件、数据库连接等)时非常有用。 一个简单的示例: import threading import timeclass Singleton:instance Nonelock…...
Linux架构篇、第五章_06Jenkins 触发器全面解析与实战指南
Linux架构篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:jenkins触发器的介绍与使用 版本号: 1.0,0 作者: laowang 日期: 2025.05.16 适用环境:rocky9.5 文档说明 本文档为《jenkins 触发器的介绍与…...
如何快速更换电脑浏览器ip:教程与注意事项
无论是为了访问地域限制内容、保护隐私,还是解决网络问题,快速更换浏览器IP地址的需求日益增多。以下是快速更换电脑浏览器IP地址的几种常用方法及注意事项,结合了多种场景下的解决方案: 一、快速更换浏览器IP的方法 1. 代理服务…...
《黑马前端ajax+node.js+webpack+git教程》(笔记)——ajax教程(axios教程)
黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖 文章目录 框架前置导学AJAX-Day01-01.AJAX入门与axios使用什么是AJAX如何使用AJAX使用axios获取数据案例axios语法尝试获取数据代…...
超级管理员租户资源初始化与授权管理设计方案
背景说明 在多租户系统中,资源(如功能模块、系统菜单、服务能力等)需按租户维度进行授权管理。超级管理员在创建新租户时,需要初始化该租户的资源授权信息。 两种可选方案 方案描述方案 A:前端传入选中的资源列表创…...
【Python训练营打卡】day30 @浙大疏锦行
DAY 30 模块和库的导入 知识点回顾: 1. 导入官方库的三种手段 2. 导入自定义库/模块的方式 3. 导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何…...
微前端记录
微前端 实习过程中,做了些微前端方向的调研,记录下 微前端将前端拆分为独立的可以单独运行,测试,部署的代码, 具有技术栈无关,多团队,多业务线协作的特点。 前端现有的页面,分为单页…...
词嵌入基础
一 前言 最近在学习NLP方面知识,在此记录一下词嵌入的技术。 二 词袋法 1.理论 就是统计一个句子或文章中,词语出现的次数。这方法有去重词袋法,无去重词袋法。 a 原理与案例 chinese_docs ["我爱自然语言处理","自然语…...
CSS之网页元素的显示与隐藏(旧土豆网遮罩案例)
网页元素的显示与隐藏。 很多网页的侧边栏都会出现广告,我们点击关闭时,广告会消失不见,但若重新刷新网页页面,则广告会重新出现。网页的广告并非是真的被删除了,而是被暂时的隐藏起来了。 • display • visibil…...
关于 Web 漏洞原理与利用:2. XSS(跨站脚本攻击)
一、原理: 用户输入未过滤被执行 攻击者输入的内容,如果没有被正确处理(过滤/转义),被网页原样输出到浏览器中,那么这些内容就可能会被浏览器当成代码执行,这就是 XSS(跨站脚本攻击…...
【TTS回顾】深度剖析 TTS 合成效果的客观评估与主观评价
如何评估合成音色的效果 当我们面对一个新发布的 TTS 模型,或者在多个模型之间进行选择时,一个核心问题摆在我们面前:如何科学、全面地评估一个 TTS 模型的合成效果? 仅仅凭感觉“听一听”显然不够客观和系统。我们需要一套行之有效的评估方法和指标体系,来衡量 AI “说话…...
WPF点击按钮弹出一个窗口
一、基本方法:直接实例化并显示窗口 1. 普通窗口(无参数) 适用场景:简单的弹出窗口,无需传递数据。 private void Button_Click(object sender, RoutedEventArgs e) { var newWindow new MyWindow(); // 实例化…...
WPF中的ObjectDataProvider:用于数据绑定的数据源之一
ObjectDataProvider是WPF(Windows Presentation Foundation)中一种强大而灵活的数据绑定源,它允许我们将对象实例、方法结果甚至是构造函数的返回值用作数据源。通过本文,我将深入探讨ObjectDataProvider的工作原理、使用场景以及如何在实际应用中发挥其…...
Java POJO接收前端null值设置
在 Java 中,若要让 price 字段接收前端传递的 null 值,只需确保以下几点: 1. 使用包装类型 Double 你的 price 字段已经是包装类型 Double(而不是基本类型 double),这天然支持 null 值。基本类型 double …...
C++(24):容器类<list>
目录 一、核心概念 二、基本语法 1. 声明与初始化 2.添加元素 3.访问与遍历 4. 删除元素 三、特点 1. 高效插入/删除 2. 不支持随机访问 3. 特有成员函数 4. 内存与性能 四、示例代码 五、成员函数 六、使用场景 七、注意事项 Lists将元素按顺序储…...
WPF Data Binding 及经典应用示例
什么是Data Binding(数据绑定)? Data Binding是WPF中的核心机制,它建立了UI元素(视图)与数据对象(模型/视图模型)之间的连接通道,实现了数据的自动同步。当数据发生变化…...
Qt—模态与非模态对话框
Qt—模态与非模态对话框 核心概念 模态对话框:强制用户优先处理当前窗口,阻塞指定范围的用户交互。非模态对话框:允许用户自由切换窗口,无交互限制。 一、模态对话框类型与行为 1. 应用级模态(Applica…...
如何实现从网页一键启动你的 Electron 桌面应用(zxjapp://)
在现代桌面应用开发中,Electron 凭借其跨平台能力和前端友好的特性,受到了越来越多开发者的青睐。但你是否想过,如何让用户从网页上一键启动你本地的 Electron 应用?比如像某些云盘客户端那样,点击网页上的按钮就能直接…...
linux编译安装srs
下载编译运行 git clone https://github.com/ossrs/srs.git cd srs/trunk ./configure --h265on make需要安装 yum install -y patch yum install -y unzip yum install -y tcl编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/s…...
对于程序员的个人理解
系统架构师 1.下图是应该具备的能力,而且看前辈的资料中,发现干的时间越多就越全能。 2.对于新技术来说应该让其先沉淀三年左右看他是不是能打,同时可以避免其大规模的改动。 3.要有宏观视野 【要看自己所开发的东西是不是可以随时调用&am…...
Web安全基础
文章目录 前端基础浏览器工作原理HTTP超文本传输协议cookiesessiontoken web服务器USBWebServerNginx介绍 前端三大件html超文本标记语言CSS层叠样式表JavaScript基本语法php基本语法 攻击手段文件上传漏洞文件包含漏洞代码执行漏洞变量修改shell监听SQL注入跨站脚本XSSXSS示例…...
从秒开到丝滑体验!WebAssembly助力ZKmall商城重构 B2B2C 商城性能基线
在 B2B2C 电商领域,用户对页面加载速度与交互流畅度的要求日益严苛。传统 Web 技术在处理复杂业务逻辑、海量数据渲染时,常出现卡顿、延迟等问题,导致用户流失。ZKmall 商城创新性地引入 WebAssembly(简称 Wasm)技术&a…...