Unity向Web服务器上传和下载图片

Unity向Web服务器上传和下载图片

  • 如果本片有看不懂的请查看我上篇文章:[Unity与Web服务器Post,Get](https://blog.csdn.net/qq_42194657/article/details/103031573)
  • 一、上传和下载图片
    • 1.在Unity中创建一个RawImage并在WebManager.cs脚本中添加一个Texture2D属性用于保存图片信息、一个String属性存取本地加载的图片地址、一个RawImage属性用于显示上传的图片:
    • 2.在WebManager.cs脚本中创建一个加载本地图片的方法在Awake中初始化加载图片,加载的图片与m_uploadImage关联,后面我们只需要将m_uploadImage这张图片上传到服务器即可:
    • 3.在WebManager.cs中添加一个上传方法和一个读取方法如下:
    • 4.在OnGUI中添加上传和下载代码并修改原始Rect的参数
    • 5.修改index.php代码
    • 6.测试如下:
  • 二、删除服务器文件夹与创建服务器文件夹
    • 1.在WebManager.cs中添加一个创建文件夹方法和一个删除文件夹方法
    • 2.在OnGUI函数中添加如下代码
    • 3.修改index.php代码

如果本片有看不懂的请查看我上篇文章:Unity与Web服务器Post,Get

一、上传和下载图片

Unity的WWW不但能上传下载文本形式的数据,还可以上传下载图片,不过在传输过程中,图片的信息需要转为文本格式。

1.在Unity中创建一个RawImage并在WebManager.cs脚本中添加一个Texture2D属性用于保存图片信息、一个String属性存取本地加载的图片地址、一个RawImage属性用于显示上传的图片:

string PicturePath = @"file://C:\Users\Administrator\Desktop\vip.jpg";public RawImage myRaw;public Texture2D m_uploadImage;

2.在WebManager.cs脚本中创建一个加载本地图片的方法在Awake中初始化加载图片,加载的图片与m_uploadImage关联,后面我们只需要将m_uploadImage这张图片上传到服务器即可:

private void Awake()
{StartCoroutine(ReadPic());
}IEnumerator ReadPic()
{WWW www = new WWW(PicturePath);yield return www;if (www.error != null){m_info = www.error;yield return null;}m_uploadImage = www.texture;
}

3.在WebManager.cs中添加一个上传方法和一个读取方法如下:

/// <summary>/// 服务器下载图片/// </summary>/// <returns></returns>IEnumerator DownLoadPic(){WWW www = new WWW("http://127.0.0.1:8088/upload/xxx.png");yield return www;if (www.error != null){Debug.LogError(www.error);yield return null;}myRaw.texture = www.texture;}/// <summary>/// 图片上传服务器/// </summary>/// <returns></returns>IEnumerator IRequestPic(){WWWForm form = new WWWForm();form.AddField("folder","upload/");form.AddBinaryData("Pic", m_uploadImage.EncodeToPNG(),"xxx.png","image/png");WWW www = new WWW("http://127.0.0.1:8088/index.php", form);yield return www;if (www.error != null){Debug.LogError(www.error);yield return null;}if (www.isDone){Debug.LogError("上传成功");StartCoroutine(DownLoadPic());}Debug.LogError(www.text);}

在上传的这段代码中,我们使用EncodeToPNG函数将图片转出为byte数组,使用WWWForm的方式上传到Web服务器上,与之前不同的是,这一次上传的PNG格式的图片。当上传完成之后在加载该图片。

4.在OnGUI中添加上传和下载代码并修改原始Rect的参数

 private void OnGUI(){GUI.BeginGroup(new Rect(Screen.width * 0.5f - 100,Screen.height * 0.5f -100,500,200),"");GUI.Label(new Rect(10,10,400,30),m_info);if (GUI.Button(new Rect (10,50,150,30),"GetData")){StartCoroutine(IGetData());}if (GUI.Button(new Rect(10,80,150,30),"Post Data")){StartCoroutine(IPostData());}if (GUI.Button(new Rect(10, 110, 150, 30), "上传 Image")){StartCoroutine(IRequestPic());}if (GUI.Button(new Rect(10, 140, 150, 30), "下载 Image")){StartCoroutine(DownLoadPic());}GUI.EndGroup();}

5.修改index.php代码

<?php
if ( isset($_GET['username']) && isset($_GET['password']) )
{echo 'username is '.$_GET['username'].' and password is '.$_GET['password']; 
}
else if ( isset($_POST['username']) && isset($_POST['password']) )
{echo 'username is '.$_POST['username'].' and password is '.$_POST['password'];
}
else if( isset($_FILES['Pic']))
{//$_FILES['字段名']['name'] 客户端文件的原名称。//$_FILES['字段名']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。//$_FILES['字段名']['size'] 已上传文件的大小,单位为字节。//$_FILES['字段名']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。//$_FILES['字段名']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)$folder=$_POST["folder"];//根据表单字段接受文件夹的字符串信息$fileName=$_FILES["Pic"]["name"];//根据表单字段接收需要保存的文件名字$tmp=$_FILES["Pic"]["tmp_name"];$fil=$folder.$fileName;//下面这一段代码保存数据信息到文本,用来测试提交的字符串信息$file=fopen("test.txt","a+");fwrite($file,$folder."+");fwrite($file,$fileName."+");fwrite($file,$fil);fclose($file);//判断当期目录下的upload目录是否存在该文件if(!file_exists($fil)){	//如果upload目录不存在该文件则将文件上传到upload目录下move_uploaded_file($tmp,$fil);}
}
?>

因为在Unity中上传的是一张图片,所以我们使用$_FILES来获得图片,这是一个PHP数组,其中‘tmp_name’是保存临时文件的位置,我们访问数组的这个位置即可获得图片。

6.测试如下:

在这里插入图片描述
当点击上传 Image
在这里插入图片描述

二、删除服务器文件夹与创建服务器文件夹

1.在WebManager.cs中添加一个创建文件夹方法和一个删除文件夹方法

 /// <summary>/// 创建文件夹/// </summary>/// <param name="FolderName"></param>/// <returns></returns>IEnumerator CreatFolder(string FolderName){WWWForm form = new WWWForm();form.AddField("CreateFolderName", FolderName);WWW www = new WWW("http://127.0.0.1:8088/index.php", form);yield return www;if (www.error != null){m_info = www.error;yield return null;}m_info = www.text;if (www.isDone){Debug.Log("创建文件夹完成");}Debug.LogError(www.text);}/// <summary>/// 删除文件夹/// </summary>/// <param name="FolderName"></param>/// <returns></returns>IEnumerator DelFolder(string FolderName){WWWForm form = new WWWForm();form.AddField("DeleteFolderName", FolderName);WWW www = new WWW("http://127.0.0.1:8088/index.php", form);yield return www;if (www.error != null){m_info = www.error;yield return null;}m_info = www.text;if (www.isDone){Debug.Log("删除文件夹完成");}Debug.LogError(www.text);}

2.在OnGUI函数中添加如下代码

if (GUI.Button(new Rect(150, 110, 150, 30), "服务器创建文件夹")){StartCoroutine(CreatFolder("NewFolder"));}if (GUI.Button(new Rect(150, 140, 150, 30), "服务器删除文件夹")){StartCoroutine(DelFolder("NewFolder"));}

3.修改index.php代码

<?php
if ( isset($_GET['username']) && isset($_GET['password']) )
{echo 'username is '.$_GET['username'].' and password is '.$_GET['password']; 
}
else if ( isset($_POST['username']) && isset($_POST['password']) )
{echo 'username is '.$_POST['username'].' and password is '.$_POST['password'];
}
else if( isset($_FILES['Pic']))
{//$_FILES['字段名']['name'] 客户端文件的原名称。//$_FILES['字段名']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。//$_FILES['字段名']['size'] 已上传文件的大小,单位为字节。//$_FILES['字段名']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。//$_FILES['字段名']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)$folder=$_POST["folder"];//根据表单字段接受文件夹的字符串信息$fileName=$_FILES["Pic"]["name"];//根据表单字段接收需要保存的文件名字$tmp=$_FILES["Pic"]["tmp_name"];$fil=$folder.$fileName;//下面这一段代码保存数据信息到文本,用来测试提交的字符串信息$file=fopen("test.txt","a+");fwrite($file,$folder."+");fwrite($file,$fileName."+");fwrite($file,$fil);fclose($file);//判断当期目录下的upload目录是否存在该文件if(!file_exists($fil)){	//如果upload目录不存在该文件则将文件上传到upload目录下move_uploaded_file($tmp,$fil);}
}
else if( isset($_POST['CreateFolderName']))
{$myFile = $_POST["CreateFolderName"];//获取要创建的文件夹名字//文件存储路径if(!file_exists($myFile)){//判断文件夹是否存在//42行 mkdir($myFile,0777);//创建文件夹,并指定权限为0777才可以上传文件保存进去}
}
else if( isset($_POST['DeleteFolderName'])){$myFile = $_POST["DeleteFolderName"];//调用函数,传入路径deleteDir($myFile);
}
?>
<?php
//调用删除方法function deleteDir($dir){if (!$handle = @opendir($dir))//判断当前文件夹是否为根目录{return false;}while (false !== ($file = readdir($handle)))//循环遍历当前文件夹{if ($file !== "." && $file !== ".."){   //排除当前目录与父级目录$file = $dir . '/' . $file;if (is_dir($file)){deleteDir($file);//删除当前文件夹中的文件}else{@unlink($file);}}}@rmdir($dir);//删除文件夹}
?>

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

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

相关文章

5个适合初学者的初级网络安全工作

前言&#xff1a; 网络安全涉及保护计算机系统、网络和数据免受未经授权的访问、破坏和盗窃 - 防止数字活动和数据访问的中断 - 同时也保护用户的资产和隐私。鉴于公共事业、医疗保健、金融以及联邦政府等行业的网络犯罪攻击不断升级&#xff0c;对网络专业人员的需求很高&…

Java之AQS(AbstractQueuedSynchronizer)

Java之AQS&#xff08;AbstractQueuedSynchronizer&#xff09; AQS 介绍 AQS 的全称为 AbstractQueuedSynchronizer &#xff0c;翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。 ● 是用来实现锁或者其他同步器组件的公共基础部分的抽象实…

类和对象的创建和实例化

1. 类的概述 1.1 具体示例 类是描述一类事物的特征和行为的统称&#xff0c;抽象的不存在的&#xff0c;泛指的概念&#xff0c;例如&#xff1a;描述一个人&#xff0c;从外观上&#xff08;特征&#xff09;和言行举止&#xff08;行为&#xff09;上进行描述外观上&#xff…

【Java】MybatisPlus

MybatisPlus MybatisPlus是在mybatis基础上的一个增强型工具。它对mybatis的一些操作进行了简化&#xff0c;能够提高开发的效率。 springboot整合了mybatis之后&#xff0c;其实已经非常方便了&#xff0c;只需要导入mybatis的包后&#xff0c;在配置文件中编写数据源信息&a…

10个得心应手的数据网站,助你完成数据科学项目

本文将介绍10个获取所需数据的网站&#xff0c;助力数据科学项目。 当你的数据对你来说很枯燥或毫无意义时&#xff0c;要激励自己学习数据科学&#xff0c;或做数据科学项目真的很困难。 本文将介绍10个得心应手的网站&#xff0c;在这些网站上你可以为数据科学项目获取一些非…

计算机视觉基础(12)——图像恢复

前言 我们将学习图像恢复相关知识。主要有图像恢复的定义、评价标准和实现图像恢复的方法。图像恢复任务包括图像去噪、去模糊、图像超分辨率、图像修复等&#xff1b;评价标准有峰值信噪比和结构相似性&#xff1b;图像超分辨的方法有传统方法和基于深度学习的方法&#xff1a…

[Ray Tracing: The Next Week] 笔记

前言 本篇博客参照自《Ray Tracing: The Next Week》教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingTheNextWeek.html 该教程在ray tracing in one weekend的基础上&#xff0c;增加了运动模糊、BVH树、Texture映射、柏林噪声、光照、体积…

做外贸其实也并没有那么容易

最近无意中看到一个视频&#xff0c;视频的内容是外贸博主和一个连线人的对话&#xff0c;连线人的诉求是如何做外贸&#xff1f;怎么能把外贸做好&#xff0c; 通过博主和这个人的沟通来看&#xff0c;这个连线的人他从来没有接触过外贸&#xff0c;也不愿意去别的外贸公司上…

【Vulnhub 靶场】【Funbox: Under Construction!】【简单】【20210719】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/funbox-under-construction,715/ 靶场下载&#xff1a;https://download.vulnhub.com/funbox/Funbox10.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年07月19日 文件大小&#xff1a;1.3 GB 靶场作…

宋仕强论道之华强北山寨手机(三十)

要研究透彻深圳华强北&#xff0c;华强北的“山寨手机”是绕不过去的话题。它来的轰轰烈烈&#xff0c;造就华强北几十个亿万富翁&#xff0c;去的鼠头蛇尾留下一地鸡毛。其兴也勃焉&#xff0c;其亡也忽焉&#xff01;在华强北留下了财富的传奇故事&#xff0c;和失意者发疯跳…

ClickHouse 入门与实战教程

目录 1. ClickHouse 简介 什么是 ClickHouse&#xff1f; ClickHouse 的优势和特点 适用场景 2. 安装 ClickHouse 3. ClickHouse 的基本概念 4. ClickHouse 的基本操作 创建数据库和表、插入和查询数据 使用 MergeTree 引擎处理时序数据 管理分区 创建带有分区的 Mer…

RPA数据统计与展示

随着企业RPA机器人部署规模越来越庞大&#xff0c;更需要完善精细的管理与规划。这些进行自动化工作的数字员工&#xff0c;就像是传统的真实员工一样&#xff0c;也需要对日常的工作做好管理&#xff0c;对未来的发展做好规划&#xff0c;要实现这点&#xff0c;首先需要对RPA…