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

Unity中文件上传以及下载,获取下载文件大小的解决方案

首先现在Unity插件那么的广泛的情况下,很多东西都不需要自己实现,直接使用第三方插件就可以了,但为什么这里需要自己写,接下来说明原因。

在Unity商城中有很多关于关于网络接口调用的插件,其中有一款叫BestHTTP这款使用比较广泛的插件,不知道朋友们是不是都知道,是不是都有用过,很多功能都已经给你实现好了,你只需要调用就可以了,插件很好用是吧。

以前我也用这个插件,在很多方面的确很好用,但是在个别平台有个很严重的问题,这个插件的调用占用内存会非常高,而且有一定的内存泄露。

在PC和移动端,由于现在硬件设备配置普遍都比较高,所以可能感觉的不会很明显,但在Webgl端,也是我经历之后才在之后的项目中不再使用这款插件的原因。在Unity的Webgl,限制了最多只能使用2048m的缓存,超过这个缓存值,网页就会报异常,到现在我也不知道该怎么解决这个问题,希望有知道的朋友告知一下,谢谢。

继续说原因,在Webgl端使用这个插件会有很明显的内存被大量占用,并且有一定的内存泄露,之前有一个项目,加载场景AB包,提一嘴本身每个平台的AB大小都是不一样的,虽然没比较过所有平台的,但是Webgl的AB包会比PC和移动端的大很多。

加载100m左右场景AB包,使用该插件加载只能加载2-3次就会直接报内存溢出,也就是前面说的超过了2048m的缓存上限。

因此后续就改成用Unity自带的UnityWebRequest类了,使用自带的也会有多占用内存的现象但是比该插件就会好很多,例如加载100m左右的ab能够加载12-15次时,才有可能会出现内存溢出的问题,如果有些数据释放的及时,甚至能加载更多次。

说了一大端的原因,那么接着就进入正题,首先下载,下载有个小问题,就是我们拿不到下载文件的总大小,这里我就提供解决方案,具体的实现根据自身项目使用

解决方案:
1、如果文件保存在对象存储上的,有一个Head请求,可以拿到文件的信息,里面包含了文件大小,但是这需要对象存储开启Head请求的权限
2、后台自己写一个保存文件的总大小,下载前先调用获取文件信息
3、UnityWebRequest中提供了两个数据,一个是progress进度,一个是当前下载量,那么其实可以通过 当前下载量/progress,反推出文件大小,只不过这个方式可能存在误差,但应该误差不会很大,所以如果不想多次请求的话可以使用这种方式

1、通过Head请求获取文件信息(方法使用了异步,使用异步需要扩写异步Task.GetAwaiter(),这方面已经有现成的异步插件了,以从夸克下载地址获取(不定时会更新该插件,如果其他文章中涉及到第三方插件,也会在该地址中提供测试的插件下载):https://pan.quark.cn/s/58004b052787)

        public static async void GetDownloadFileSize(string downloadUrl, Action<WebRequetState, UnityWebRequest, ulong, string> outputAction = null, Dictionary<string, string> headers = null){using (UnityWebRequest webRequest = UnityWebRequest.Head(downloadUrl)){if (headers != null){foreach (var info in headers){webRequest.SetRequestHeader(info.Key, info.Value);}}webRequest.useHttpContinue = false;outputAction?.Invoke(WebRequetState

相关文章:

Unity中文件上传以及下载,获取下载文件大小的解决方案

首先现在Unity插件那么的广泛的情况下,很多东西都不需要自己实现,直接使用第三方插件就可以了,但为什么这里需要自己写,接下来说明原因。 在Unity商城中有很多关于关于网络接口调用的插件,其中有一款叫BestHTTP这款使用比较广泛的插件,不知道朋友们是不是都知道,是不是…...

Word/WPS 删除最后一页空白页,且保持前面布局样式不变

如题&#xff0c;试了多种方法&#xff0c;都不行。主要是可能的原因太多了&#xff0c;没有通解&#xff0c;这只是适用于我的情况。 解决方案&#xff1a; 首先光标放在倒数第二页&#xff08;即想保留的最后一页&#xff09;&#xff0c;点击页面右下角这个小箭头&#xff…...

MySQL长事务的隐患:深入剖析与解决方案

MySQL长事务的隐患&#xff1a;深入剖析与解决方案 一、什么是长事务&#xff1f; 在数据库系统中&#xff0c;长事务(Long Transaction)通常指执行时间超过预期或系统设定阈值的事务。对于MySQL而言&#xff0c;虽然没有严格的时间定义&#xff0c;但一般认为执行时间超过数…...

【Tauri】桌面程序exe开发 - Tauri+Vue开发Windows应用 - 比Electron更轻量!8MB!

效果图 Tauri的二进制文件体积显著小于Electron&#xff0c;安装包通常缩小80%以上。应用启动更快&#xff0c;内存占用更低&#xff0c;尤其在老旧设备上体验更流畅。 写在前面 Tauri官网 https://tauri.app/zh-cn/支持语言&#xff1a;js、ts、rust、.net编译出来的exe文件&…...

2025春季NC:3.1TheTrapeziumRule

3.1TheTrapeziumRule 📐 The Idea Instead of finding the exact area under a curve y = f ( x ) y = f(x) y=...

【摩尔定律】

一、摩尔定律的核心定义​​ ​​原始表述&#xff08;1965年&#xff09;​​ “集成电路上可容纳的晶体管数量&#xff0c;每隔约 ​​18-24个月​​ 便会增加一倍&#xff0c;同时性能提升一倍&#xff0c;而成本下降一半。” ​​简化理解​​ 芯片的 ​​晶体管密度​​ 和…...

Maven 依赖冲突调解与版本控制

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

《Python Web部署应知应会》Flask网站隐藏或改变浏览器URL:从Nginx反向代理到URL重写技术

Flask网站隐藏或改变浏览器显示URL地址的实现方案&#xff1a;从Nginx反向代理到URL重写技术 引言 在Web应用开发中&#xff0c;URL路径的安全性往往被忽视&#xff0c;这可能导致网站结构和后端逻辑被攻击者轻易推断。对于Flask框架开发的网站&#xff0c;如何隐藏或改变浏览…...

6.2 内容生成与营销:个性化内容创作与营销策略优化

随着消费者对个性化体验的需求日益增长&#xff0c;传统的内容创作与营销方式已难以满足市场竞争的需要。基于大语言模型&#xff08;LLM&#xff09;与智能代理&#xff08;Agent&#xff09;的技术为企业提供了全新的解决方案&#xff0c;能够实现高效、精准、规模化的内容生…...

平面连杆机构(上)

1、平面四杆机构的类型与演化 1&#xff09;平面四杆机构的类型 a、铰链四杆机构&#xff1a;曲柄摇杆机构、双曲柄机构、双摇杆机构 b、其他四杆机构&#xff1a;曲柄滑块机构、导杆机构、滑块机构、双滑块机构、偏心轮四杆机构...... 2&#xff09;平面四杆机构的演化 a、…...

【数据结构刷题】顺序表与ArrayList

【数据结构刷题】顺序表与ArrayList 1. 杨辉三角2. 合并两个有序数组 1. 杨辉三角 LC链接&#xff1a;杨辉三角 //杨辉三角import java.util.ArrayList; import java.util.List;public class Demo1 {public List<List<Integer>> generate(int numRows) {List<…...

顶点着色器和片元着色器染色+表面体着色器染色

顶点/片元着色器染色 创建材质球及Shader同名文件VFColor //Update NOTE&#xff1a;replaced mul(UNITY_MATRIX_MVP,*) with UnityObjectToClipPos(*) Shader "CreateTest/VFColor" {Properties{_Color("颜色",Color)(1,1,1,1)}SubShader{Pass{//顶点片…...

240426 leetcode exercises

240426 leetcode exercises jarringslee 文章目录 240426 leetcode exercises[1669. 合并两个链表](https://leetcode.cn/problems/merge-in-between-linked-lists/?envTypeproblem-list-v2&envIdlinked-list)&#x1f501;基础版 保存断点&#xff0c;先拼再补&#x1f…...

代码随想录算法训练营Day35

卡码网46.携带研究材料 力扣494.目标和【meidum】 力扣416.分割等和子集【medium】 一、卡码网46.携带研究材料 题目链接&#xff1a;卡码网46.携带研究材料 视频链接&#xff1a;代码随想录 题解链接&#xff1a;代码随想录 1、思路 dp[i][j] 表示从下标为 [0-i] 的物品里任意…...

C++17 折叠表达式

C17 引入的折叠表达式&#xff08;Fold Expressions&#xff09; 是处理可变参数模板&#xff08;Variadic Templates&#xff09;的革命性特性。它通过简洁的语法&#xff0c;使得对参数包&#xff08;Parameter Pack&#xff09;的操作更加直观和高效&#xff0c;避免了传统的…...

Ubuntu编译opencv源码

准备 Ubuntu版本&#xff1a;22.04opencv版本&#xff1a;4.9.0没下载Ubuntu镜像的可以在清华镜像下载 本文以4.9.0版本演示&#xff0c;可根据自身情况选择 安装JDK和依赖项 本次编译主要为了获取java在linux环境下的动态库&#xff0c;所以需要在虚拟机上下载jdk # 安装…...

一种滑窗像素自差值的深度学习损失函数

公司项目&#xff0c;已申请专利。 深度学习作为新兴技术在图像领域蓬勃发展&#xff0c;因其自主学习图像数据特征避免了人工设计算法的繁琐&#xff0c;精准的检测性能、高效的检测效率以及对各种不同类型的图像任务都有比较好的泛化性能&#xff0c;使得深度学习技术在图像领…...

【Typecho】给Joe主题后台添加custom自定义功能!

大家好&#xff0c;今天来添加一下自定义功能&#xff01; &#x1f602; 温馨提示&#xff1a;站长已经通过本地环境测试custom自定义功能&#xff0c;功能正常可以使用&#xff0c;按照我的操作来一定成功&#xff01; 大纲 创建custom.php粘贴代码到custom.php文件引入cus…...

一些常见的资源池管理、分布式管理和负载均衡的监控工具

资源池管理监控工具 Prometheus 是一款开源的系统监控和警报工具。它可以通过收集各种指标数据,如CPU使用率、内存使用量、磁盘I/O等,来监控资源池中的服务器、容器等资源。Prometheus具有强大的查询语言和可视化功能,能够帮助管理员快速了解资源的使用情况,并及时发现潜在…...

WPF程序使用Sugar操作数据库

WPF 程序使用 Sugar ORM 操作数据库 一、引言 在 WPF(Windows Presentation Foundation)应用程序中,数据库操作是不可或缺的一部分。Sugar ORM(对象关系映射)是一种轻量级的 ORM 框架,它简化了数据库操作,使得开发者能够以面向对象的方式与数据库进行交互。本文将详细…...

【Castle-X机器人】四、智能机械臂安装与调试

持续更新。。。。。。。。。。。。。。。 【Castle-X机器人】智能机械臂安装与调试 四、智能机械臂安装与调试2.1 安装2.2 调试2.2.1 2D摄像头测试 四、智能机械臂安装与调试 2.1 安装 使用相应工具将机械臂固定在Castle-X机器人底盘 2.2 调试 2.2.1 2D摄像头测试 内容地址 链…...

goweb-signup注册功能实现

注册功能 route.go package routerimport ("bluebell/controller""github.com/gin-gonic/gin" )func SetupRouter(mode string) *gin.Engine {r : gin.Default()r.POST("/signup", controller.SignupHandler)return r }UserController.go pac…...

Linux: 如何在VMware上安装Ubuntu操作系统

在VMware上安装Ubuntu操作系统是一个相对简单的过程&#xff0c;以下是详细的步骤&#xff1a; 一、准备工作 安装VMware软件 确保你已经在电脑上安装了VMware Workstation&#xff08;适用于Windows&#xff09;或VMware Fusion&#xff08;适用于Mac&#xff09;。如果没有安…...

详解 Network.framework:iOS 网络开发的新基石

详解 Network.framework&#xff1a;iOS 网络开发的新基石 引言 自 iOS 12 和 macOS 10.14 起&#xff0c;Apple 推出了一个新的网络开发框架 —— Network.framework。它被定位为下一代网络连接的基础设施&#xff0c;让开发者可以以更安全、更高效的方式&#xff0c;管理 T…...

Java—— 五道算法水题

第一题 需求&#xff1a; 包装类&#xff1a;键盘录入一些1~100之间的整数&#xff0c;并添加到集合中。直到集合中所有数据和超过200为止 代码实现&#xff1a; import java.util.ArrayList; import java.util.Scanner;public class Test1 {public static void main(String[]…...

将服务器接到路由器上访问

应用场景: 实验室网卡更换了,新网卡没有报备到校园网,暂时无法通过外部链接连到服务器. 除了跳板机之外,可以使用以下方法将服务器接入到路由器访问. 将服务器接到交换机上&#xff0c;将交换机接到路由器上本地电脑 连接路由器wifi登录http://192.168.0.1/&#xff0c;访问路…...

MyBatis缓存配置的完整示例,包含一级缓存、二级缓存、自定义缓存策略等核心场景,并附详细注释和总结表格

以下是MyBatis缓存配置的完整示例&#xff0c;包含一级缓存、二级缓存、自定义缓存策略等核心场景&#xff0c;并附详细注释和总结表格&#xff1a; 1. 一级缓存&#xff08;默认开启&#xff09; // 使用同一SqlSession执行两次查询&#xff0c;自动命中一级缓存 try (SqlSe…...

我爱学算法之—— 二分查找(上)

了解二分算法 二分查找&#xff0c;想必多多少少有一点了解了&#xff0c;我们了解的二分查找算法&#xff1a; 当一个数组有序的时候&#xff0c;我们可以使用二分算法来查找一个值&#xff1b; 直接比较mid((left right)/2)和我们要查找的值target&#xff1b;如果nums[mid]…...

Tauri快速入门1 - 搭设开发环境

前言 Tauri框架结合了 Web 技术的优势&#xff0c;开发者能用熟悉的 HTML、CSS 和 JavaScript 进行开发&#xff0c;像开发网页应用一样便捷高效。 其次&#xff0c;该框架有着出色的性能表现&#xff0c;相比一些传统框架&#xff0c;其资源占用相对较低。在安全性方面&#x…...

tigase源码学习杂记-IO处理的线程模型

前言 tigase是一个高性能的服务器&#xff0c;其实个人认为作为即时通讯的服务器&#xff0c;高性能主要体现在他对IO复用&#xff0c;和多线程的使用上&#xff0c;今天来学习一下他的IO的线程处理模型的源码&#xff0c;并记录一下他优秀的设计。 概述 tigase是使用的NIO作…...

电商秒杀系统技术栈与难点解析 - Java架构师面试实战

电商秒杀系统技术栈与难点解析 - Java架构师面试实战 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎参加我们公司的面试。首先&#xff0c;请您简单介绍一下自己。 马架构&#xff1a;您好&#xff0c;我叫马架构&#xff0c;拥有十年的Java研发经验和架构设计经验&…...

ASP.NET MVC​ 入门指南三

16. 安全性 16.1 身份验证和授权 身份验证&#xff1a;确认用户的身份。ASP.NET MVC 支持多种身份验证方式&#xff0c;如表单身份验证、Windows 身份验证和 OAuth 等。 表单身份验证&#xff1a;用户通过输入用户名和密码登录&#xff0c;服务器验证后颁发一个身份验证票证&…...

导览项目KD-Tree最近地点搜索优化

背景描述 我在做一个校园导览的小程序的时候&#xff0c;涉及到最近地点搜索的业务功能&#xff0c;根据当前位置搜索最近的校园地点&#xff0c;比如教学楼&#xff0c;图书馆&#xff0c;自习室&#xff0c;办事地点等等。 我最初想到的办法就是获取用户当前位置的经纬度后&…...

【Pandas】pandas DataFrame rmul

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象&#xff08;如 DataFrame、Series 或标量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...

苹果(IOS)手机怎么开启开发者模式(简单明了版)

苹果手机怎么开启开发者模式&#xff08;简单明了版&#xff09; iOS 16 以后&#xff0c;苹果新增了「开发者模式」。如果你要在 iPhone 上运行自己开发的 App&#xff0c;比如通过 Xcode 或其它工具安装测试包&#xff0c;必须先开启这个模式。 下面是开启方法&#x1f447…...

Agent2Agent

rag系列文章目录 文章目录 rag系列文章目录前言一、协议设计原则与技术基础二、通信机制与消息格式三、身份验证与安全设计四、能力发现与任务协作总结 前言 谷歌于2025年4月推出了A2A&#xff08;Agent2Agent&#xff09;协议&#xff0c;旨在解决当前AI智能体生态中的互操作…...

【MCP】了解远程MCP调用背后使用的SSE协议

本文介绍了远程MCP使用的SSE协议&#xff0c;通过wireshark抓包的方式了解MCP客户端和服务端之间通过SSE协议交互涉及到的请求与响应。 1. 什么是SSE协议&#xff1f; 参考&#xff1a;https://zhuanlan.zhihu.com/p/1894024642395619635和https://blog.csdn.net/aerror/artic…...

Log4j Properties 配置项详细说明

Log4j Properties 配置项详细说明 1. 核心配置项说明 根日志记录器&#xff1a;定义全局日志级别和输出目标 log4j.rootLogger [级别], appender1, appender2,...Appender 定义&#xff1a;指定日志输出目标&#xff08;控制台、文件等&#xff09; log4j.appender.[名称].[属…...

哪些物联网框架支持多协议接入?选型指南与核心能力解析

在物联网&#xff08;IoT&#xff09;领域&#xff0c;设备通信协议的多样性&#xff08;如MQTT、CoAP、Modbus、Zigbee等&#xff09;是开发者面临的核心挑战之一。选择支持多协议接入的物联网框架&#xff0c;可以显著降低异构设备连接的复杂度&#xff0c;提升系统的兼容性和…...

第三方测试机构如何保障软件质量并节省企业成本?

在软件行业&#xff0c;第三方测试机构扮演着极其重要的角色。他们提供独立且专业的测试服务&#xff0c;目的是为了保障软件的质量以及提升用户的使用体验。 专业独立 测试机构拥有经验丰富的测试员和严谨的测试流程。他们会对软件各项功能进行细致检验&#xff0c;力求不放…...

Eigen迭代求解器类

1. 迭代求解器核心类概览 Eigen 提供多种迭代法求解稀疏线性方程组 AxbAxb&#xff0c;适用于大规模稀疏矩阵&#xff1a; 求解器类适用矩阵类型算法关键特性ConjugateGradient对称正定&#xff08;SPD&#xff09;共轭梯度法&#xff08;CG&#xff09;高精度&#xff0c;内…...

AI 与高性能计算的深度融合:开启科技新纪元

在当今科技迅猛发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;与高性能计算&#xff08;HPC&#xff09;正以前所未有的态势深度融合&#xff0c;这种融合宛如一场强大的风暴&#xff0c;席卷并重塑着众多领域的格局。从科学研究的突破到商业应用的革新&#xff0c…...

写入cache时数据格式错误产生的ERRO导致整个测试框架无法运行

背景 在yaml文件里面提取request放入缓存时&#xff0c;request是form-data&#xff0c;错用jsonpath提取并写入缓存&#xff0c;导致后面的所有运行都异常 原因 起因是我想引用请求体的Uid&#xff0c;提取方式用错了&#xff0c;所以可以看到最后一段current_request_set_…...

3:QT联合HALCON编程—海康相机SDK二次程序开发

思路&#xff1a; 1.定义带UI界面的主函数类 1.1在主函数中包含其它所有类头文件&#xff0c;进行声明和实例化&#xff1b;使用相机时&#xff0c;是用公共相机的接口在某一个具体函数中去实例化具体的海康相机对象。 1.2设计界面&#xff1a;连接相机&#xff0c;单次采集&a…...

图论---LCA(倍增法)

预处理 O( n logn )&#xff0c;查询O( log n ) #include<bits/stdc.h> using namespace std; typedef pair<int,int> pii; const int N40010,M2*N;//是无向边&#xff0c;边需要见两边int n,m; vector<int> g[N]; //2的幂次范围 0~15 int depth[N],fa[N][1…...

Bento4的安装和简单转码

1.下载Bento4 2解压复制到安装位置 3配置环境变量 在path下配置 5.视频转码为Dash 视频分片化 mp4fragment --track video --fragment-duration 4000 C:\Users\zcc\Downloads\Video\gg.mp4 C:\Users\zcc\Downloads\Video\out3\input_fragmented.mp4分片化的视频转码为dash…...

用python写一个相机选型的简易程序

最近有点忙&#xff0c;上来写的时间不多。 今天就把之前写的一个选型的简易程序&#xff0c;供大家参考。 代码&#xff1a; import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QLineEdit, QPushButton, QGro…...

论人际关系发展的阶段

朋友关系的建立和发展是一个渐进的过程&#xff0c;通常需要经历情感积累、信任磨合和价值观融合等阶段。以下是朋友关系发展的详细阶段划分及核心特征&#xff1a; 一、表层接触阶段&#xff08;社交试探期&#xff09; 核心特征&#xff1a;以信息交换为主&#xff0c;关系停…...

2软考系统架构设计师:第一章系统架构概述 - 练习题附答案及超详细解析

第一章系统架构概述综合知识单选题 每道题均附有答案解析&#xff1a; 1. 系统架构的核心定义是什么&#xff1f; A. 系统代码的实现细节 B. 系统组件、组件关系及与环境交互的高层次设计蓝图 C. 用户界面的设计规范 D. 数据库表结构的详细设计 答案&#xff1a;B 解析&…...

华为OD机试真题——素数之积RSA加密算法(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式&#xff1b; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析&#xff1b; 本文收录于专栏&#xff1a;《2025华为OD真题目录…...