如果本片有看不懂的请查看我上篇文章: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);//删除文件夹}
?>

Unity向Web服务器上传和下载图片相关推荐

  1. 通过Web Services上传和下载图片文件

    通过Web Services上传和下载图片文件 随着Internet技术的发展和跨平台需求的日益增加,Web Services的应用越来越广,我们不但需要通过Web Services传递字符串信息,而 ...

  2. php视频文件上传到服务器,上传和下载图片和视频到服务器

    一.如何上传图片视频到服务器上 1.upLoad.html文件 //需要加入enctype="multipart/form-data" Filename: 2.upLoadFile ...

  3. windows主机用scp命令向Linux服务器上传和下载文件

    windows主机用scp命令向Linux服务器上传和下载文件 文章目录: 一.scp介绍 二.scp上传和下载 1.上传 2.下载 三.scp的更多参数 一.scp介绍 scp是secure cop ...

  4. 向web服务器传文件,c++实现向web服务器上传文件

    [实例简介] vs2013 c++实现上传的客户端,服务端为java写的web工程,模拟post方法,可以上传大文件 [实例截图] [核心代码] c向web服务器上传文件 └── c++ 向web服务 ...

  5. android+nutz后台如何上传和下载图片

    android+nutz后台如何上传和下载图片 发布于 588天前  作者 yummy222  428 次浏览  复制  上一个帖子  下一个帖子  标签: 无 最近在做一个基于android的app ...

  6. 从服务器上传和下载文件方法

    1. ssh 安装SSH Secure Shell Client客户端 下载链接 http://download.csdn.net/detail/jiandanjinxin/9755684 使用方法参 ...

  7. springboot+web文件上传和下载

    一.首先安装mysql数据库,开启web服务器. 二.pom.xml文件依赖包配置如下: <?xml version="1.0" encoding="UTF-8&q ...

  8. java web 文件上传和下载

     在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直 ...

  9. Windows Mobile使用Web Service上传和下载二进制数据流

    最近,有个项目需要使用手机GPRS上传数据,使用CMNET接入GPRS(注解1),但是此种方式流量过大,用户反映每月50块钱包500M的流量还不够用(严重怀疑中,不过我也没论证).后来仔细研究了下代码 ...

最新文章

  1. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结
  2. lampp mysql 等待响应时间很长_XAMPP 的 phpMyAdmin 就会有文件大小限制、上传超时等各种问题...
  3. cleaning selected projects has encountered a problem errors occurred during build
  4. CodeForces - 660C Hard Process
  5. d3 v5 api Axes
  6. Windows学习总结(20)——Win10 子系统Linux(Ubuntu 18.04)的安装与卸载
  7. Pytorch-torchvision源码解读:ASPP
  8. 黄聪:浓缩的才是精华:浅析GIF格式图片的存储和压缩(转)
  9. 数据结构笔记(二十七)-- 图的深度优先遍历
  10. oracle的优化器有哪些,Oracle优化器有哪些优化方式?
  11. 十三号星期五题解 【模拟】
  12. 手机入侵修改服务器数据,手机怎么入侵服务器修改数据库
  13. php牛牛发牌算法,分享一个牛牛算法
  14. 5g网络测试用什么软件,5G网络测速
  15. 虚拟机内存管理之内存分配器
  16. 招银网络科技2019年春招笔试面试总结
  17. autojs 悬浮框演示代码
  18. Linux socket编程
  19. IBM在欧洲建首台量子计算机
  20. ​科普:什么是WiFi 6

热门文章

  1. 第四章 用户目录,SIP和 Verto
  2. easyexcel 检查表头是否匹配_easyexcel导入获取表头并且表头为不固定列
  3. 简单AStar寻路2D示例
  4. Marco's Java【Ngnix入门(二) 之反向代理及负载均衡】
  5. BMD UltraStudio 4K Extreme 3采集卡
  6. Paraview学习小笔记
  7. 文件后缀名对应的Content-Type表
  8. 使用腾讯企业邮箱,部分邮箱无法正常接收邮件问题
  9. GRE写作重要词汇应用技巧
  10. 1111 2021数维杯 D 电影市场票房