在unity 中,使用http请求,下载文件到可读可写路径

在这里我用了一个线程池,线程池参数接收一个带有object参数的,无返回值的委托 ,下载用到的核心代码,网上拷贝的,他的核心就是发起一个web请求,然后得到请求的响应,读取响应的流

剩下的都是常见的IO操作

 

 

 

由于线程池接参数的委托,接收一个object参数。所以,我把请求地址和本地存放地址以及名字,封装了一个类,用来传参

 

 这是下载工具代码,如下

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using UnityEngine;public class DownLoaderEnum
{public string url;public string path;public DownLoaderEnum(string URL, string PATH){url = URL;path = PATH;}
}public class HttpDownload
{/// <summary>/// http下载文件/// </summary>/// <param name="url">下载文件地址</param>/// <param name="path">文件存放地址,包含文件名</param>/// <returns></returns>public void HttpDownloader(object down){if (!Directory.Exists((down as DownLoaderEnum).path))Directory.CreateDirectory((down as DownLoaderEnum).path);string tempPath = System.IO.Path.GetDirectoryName((down as DownLoaderEnum).path) + @"\temp";System.IO.Directory.CreateDirectory(tempPath);  //创建临时文件目录string tempFile = tempPath + @"\" + System.IO.Path.GetFileName((down as DownLoaderEnum).path) + ".temp"; //临时文件if (System.IO.File.Exists(tempFile)){System.IO.File.Delete(tempFile);    //存在则删除}try{FileStream fs = new FileStream(tempFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);// 设置参数HttpWebRequest request = WebRequest.Create((down as DownLoaderEnum).url) as HttpWebRequest;//发送请求并获取相应回应数据HttpWebResponse response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向目标网页发送Post请求Stream responseStream = response.GetResponseStream();//创建本地文件写入流//Stream stream = new FileStream(tempFile, FileMode.Create);byte[] bArr = new byte[1024];int size = responseStream.Read(bArr, 0, (int)bArr.Length);while (size > 0){//stream.Write(bArr, 0, size);fs.Write(bArr, 0, size);size = responseStream.Read(bArr, 0, (int)bArr.Length);}//stream.Close();fs.Close();responseStream.Close();string suffixName = (down as DownLoaderEnum).url;int su = suffixName.LastIndexOf('/');suffixName = (down as DownLoaderEnum).path+suffixName.Substring(su);// Debug.LogError(suffixName);System.IO.File.Move(tempFile, suffixName);// return true;Debug.LogError("下载完成");}catch (Exception ex){Debug.LogError("错误==>>" + ex.Message);//return false;}}
}

  

  这是测试代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using UnityEngine;public class NewBehaviourScript : MonoBehaviour {public string url = "http://dl172.80s.im:920/1802/[比得兔]剧场预告片/[比得兔]剧场预告片_hd.mp4";// Use this for initializationstring path = "";HttpDownload download = new HttpDownload();DownLoaderEnum down;private void Awake(){path = Application.streamingAssetsPath;//DirectoryInfo directory = new DirectoryInfo(path);//if (directory.Exists)//    directory.Create();//Debug.LogError(path);}// Use this for initializationvoid Start(){ThreadPool.SetMaxThreads(5, 5);down = new DownLoaderEnum(url, path);//请求url,存放地址,存放文件名}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.Space)){ThreadPool.QueueUserWorkItem(download.HttpDownloader, down);}}
}

  

  

 可以看到,已经下载完成

 

转载于:https://www.cnblogs.com/lzy575566/p/8458867.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在tinyalsa上抓取音频

我们经常会遇到这样的问题&#xff0c;应用读取到的音频有问题&#xff0c;需要在tinyalsa里面读取音频来确认是底层音频有问题&#xff0c;还是应用处理之后存在的问题。所以&#xff0c;这个patch就出现了代码的逻辑很简单&#xff0c;主要是在pcm_read的时候&#xff0c;同时…

STM32——GPIO(1)

STM32——GPIO 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 【对单片机的操作就是控制IO口】 一、GPIO&#xff08;通用输入输出口&#xff09; 1、选定需要的引脚&#xff08;对应哪一个IO口&#xff09;&#xff1b; 2、配置需要的功能&#xf…

数据库实操——pandas写入数据库数据

1、Mysql &#xff08;1&#xff09;插入数据 因为pymysql不识别除%s之外的其他字符&#xff0c;例如%d&#xff0c;%f&#xff0c;因此&#xff0c;将sql语句的values全部设置为%s def insertdata(data,table_name,connect):c_name str(data.columns.tolist()).replace(&q…

【opencv学习笔记八】创建TrackBar轨迹条

createTrackbar这个函数我们以后会经常用到&#xff0c;它创建一个可以调整数值的轨迹条&#xff0c;并将轨迹条附加到指定的窗口上&#xff0c;使用起来很方便。首先大家要记住&#xff0c;它往往会和一个回调函数配合起来使用。先看下他的函数原型&#xff1a; int createTra…

父母悄悄给自己买房,我很生气,要怎么调整心态?

——问题我是独生子&#xff0c;今年满24岁刚上研一&#xff08;普通211&#xff09;。家庭四川小城市&#xff0c;情况一般&#xff0c;父母二人体制内月薪总计一万元以内&#xff0c;家里积蓄20W-30W&#xff0c;公积金情况不清楚。从小母子关系比较僵硬&#xff0c;母亲小学…

STM32——GPIO(2)

STM32——GPIO 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 /* GPIO_InitTypeDef结构体 */ typedef enum {GPIO_Speed_10MHz 1, //枚举常量&#xff0c;值为 1&#xff0c;代表输出速率最高为 10MHzGPIO_Speed_2MHz, //对不赋值的枚举变量&a…

语音处理入门——语音的声学处理

语音的声学处理通常称为特征提取或者信号分析&#xff0c;特征是表示语音信号的一个时间片的矢量。常见的特征类型有LPC&#xff08;线性预测编码&#xff09;特征和PLP&#xff08;感知线性预测编码&#xff09;&#xff0c;该特征称为声谱特征&#xff0c;使用形成波形的不同…

BootStrap 用法

1 下载bootstrap组件 2 在jsp页面中加入bootstrap <link rel"stylesheet" type"text/css" href"css/bootstrap.min.css "> <script type"text/javascript" srcjs/bootstrap.min.js></script> <script type&qu…

正则表达式基础知识

一个正则表达式就是由普通字符&#xff08;例如字符 a 到 z&#xff09;以及特殊字符&#xff08;称为元字符&#xff09;组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板&#xff0c;将某个字符模式与所搜索的字符串进行匹配。如…

基础呀基础,用二极管防止反接,你学会了吗?

使用新的电源&#xff0c;第一次给设备供电时&#xff0c;要特别注意电源的正负极性标注。比如电源适配器&#xff0c;铭牌上面有标注插头的极性。这个符号说明插头的里面是正极&#xff0c;外面是负极&#xff0c;即“内正外负”。但是也有反过来的&#xff0c;下面这款是“内…

李宏毅的可解释模型——三个任务

1、问题 观看了李宏毅老师的机器学习进化课程之可解释的机器学习&#xff0c;课程中对主要是针对黑盒模型进行白盒模型转化的技巧和方法进行了简单介绍&#xff0c;详细细节可以参考《Interpretable Machine Learning》。像一些线性模型、树形模型是可解释的ML model&#xff…

柔性数组和环形队列之间的故事

之前的文章&#xff0c;讲解了柔性数组&#xff0c;有很多人留言&#xff0c;提到一些问题。刚好&#xff0c;之前发关于环形队列的文章有些问题&#xff0c;这次刚好拿出来一起说一下&#xff0c;并用柔性数组实现一个环形队列。柔性数组的上一篇文章环形队列C语言实现文章1、…

NodeJs实现下载Excel文件

nodejs作为一门新的语言&#xff0c;报表功能也不是十分完善。 (1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库&#xff0c;支持解析多种格式表格XLSX / XLSM / XLSB / XLS / CSV&#xff0c;解析采用纯js实现&#xff0c;写入需要依赖nodejs或者FileSaver .js实…

晚上不睡觉,搞的一个例子《JS实现动画》

照着例子做了一个程序&#xff0c;感觉很爽点击查看 转载于:https://www.cnblogs.com/guanggan123/archive/2008/07/10/1240322.html

STM32——时钟系统

STM32——时钟系统 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、时钟树 普通的MCU&#xff0c;一般只要配置好GPIO 的寄存器&#xff0c;就可以使用了。STM32为了实现低功耗&#xff0c;设计了非常复杂的时钟系统&#xff0c;必须开启外设时钟才…

目标检测发展路程(一)——Two stage

目标检测是计算机视觉领域中非常重要的一个研究方向&#xff0c;它是将图像或者视频中目标与其他不感兴趣的部分进行区分&#xff0c;判断是否存在目标&#xff0c;确定目标位置&#xff0c;识别目标种类的任务&#xff0c;即定位分类。传统的目标检测模型有VJ.Det[1,2],HOG.De…

都2021年了,c/c++开发竟然还能继续吃香??

年后就迎来了金三银四&#xff0c;你准备好2021年的跳槽涨薪计划了吗&#xff1f;今天我就来给大家分享&#xff0c;c/c作为老牌开发常青树&#xff0c;还能与java/python/go较较劲的岗位和技术在哪里&#xff01;同时&#xff0c;给大家整理了2021年系统全面技术学习资料。文末…

String.getBytes(Unicode)的疑问 以及 SHIFT-JIS编码范围

String.getBytes(charsetName),这个方法很多人都用过&#xff0c;可是有没有试过temp.getBytes("Unicode");这样的用法&#xff0c;它的返回值很奇怪&#xff0c;第1和第2个字节是-1或-2,比如下面的代码&#xff0c;你能想象出它的结果吗&#xff1f; String t…

Linux Crontab 安装使用详细说明

yum -y install vixie-cron yum -y install crontabs 说明&#xff1a;vixie-cron 软件包是 cron 的主程序&#xff1b;crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。 二、配置 cron 是 linux 的内置服务&#xff0c;但它不自动起来&#xff0…

STM32——流水灯

STM32——流水灯 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 stm32f10x_conf.h&#xff1a;打开stm32f10x_gpio.h和stm32f10x_rcc.h&#xff1b; stm32f10x_gpio.c 和 stm32f10x_rcc.c加入工程模板中&#xff0c;只说重点。 【stm32f10x_rcc.c用…