using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using UnityEngine.UI;
using System.IO;
public class NewBehaviourScript : MonoBehaviour {
//接口字符串
string str = "http://12379.tianqi.cn/Extra/getlistofworkshanchu";
public Image show;
public List<DemoText> _list;
//保存图片文件夹
private string save_url;
//保存视频文件夹
private string Save_video_url;
//材质球 Test
public Material material_test;
[SerializeField]
//视频集合
List<MovieTexture> load_movietexture = new List<MovieTexture>();
[SerializeField]
//sprite 图片集合
List<Sprite> loadsprite = new List<Sprite>();
//--------------------------------------------
// Use this for initialization
void Start () {
save_url = @"D:\Image\";
Save_video_url = @"D:\Video_demo\";
StartCoroutine(Yanshi());
}
// Update is called once per frame
void Update () {
//测试
if (Input.GetKeyDown(KeyCode.Space))
{
show.sprite = loadsprite[Random.Range(0, loadsprite.Count)];
}
if (Input.GetKeyDown(KeyCode.KeypadEnter))
{
material_test.mainTexture = load_movietexture[Random.Range(0, load_movietexture.Count)];
}
}
//从接口下载并转换及解析json
IEnumerator Yanshi()
{
WWW www = new WWW(str);
yield return www;
_list = JsonConvert.DeserializeObject<List<DemoText>>(www.text);
for (int i = 0; i < _list.Count; i++)
{
if (_list[i].type == "imgs" && _list[i].imgs.Count != 0)
{
foreach (var item in _list[i].imgs)
{
LoadTexture_video(item, "imgs");
}
}
if (_list[i].type == "video" && _list[i].video_url != null)
{
LoadTexture_video(_list[i].video_url, "video");
}
}
}
//根据不同文件分不同路径进行下载
private void LoadTexture_video(string url_image,string type_name)
{
//清空一下,防止爆满
load_movietexture.Clear();
loadsprite.Clear();
//获取到路劲
List<string> filePaths_demo = new List<string>();
//路径集合
filePaths_demo = GetImagePath(url_image);
for (int i = 0; i < filePaths_demo.Count; i++)
{
//图片
if (type_name == "imgs")
{
Down_load_image(filePaths_demo[i]);
}
//视频
else if (type_name == "video")
{
Down_load_video(filePaths_demo[i]);
}
}
}
#if 有兴趣
// 另一种获取文件
//private static byte[] getImageByte(string imagePath)
//{
// //读取到文件
// FileStream files = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
// files.Seek(0, SeekOrigin.Begin);
// //创建文件长度缓冲区
// byte[] bytes = new byte[files.Length];
// //读取文件
// files.Read(bytes, 0, (int)files.Length);
// //释放文件读取流
// files.Close();
// files.Dispose();
// files = null;
// return bytes;
//}
#endif
//获取图片路径
private List<string> GetImagePath(string url_image)
{
List<string> filePaths = new List<string>();
string[] ImageType = url_image.Split(',');
for (int i = 0; i < ImageType.Length; i++)
{
//获取unity根目录下的图片文件夹下的所有文件的路径 路径+ 名称全部存储在字符串数组中
filePaths.Add(ImageType[i]);
}
return filePaths;
}
//图片的
string image_name;
int number_image;
public void Down_load_image(string _imge_url)
{
number_image++;
image_name = save_url + number_image + ".jpg";
//特别注意 必须新建FileInfo类 否则会替换覆盖
FileInfo file = new FileInfo(image_name);
DirectoryInfo mydir = new DirectoryInfo(image_name);
//如果存在
if (File.Exists(image_name))
{
string s = @"file://"+ image_name;
StartCoroutine(Loadimage(s,"image"));
print("图片");
}
else
{
StartCoroutine(DownFile(_imge_url, image_name, file));
}
}
//视频的
string video_name;
int number_video;
public void Down_load_video(string _video_url)
{
number_video++;
video_name = Save_video_url + number_video + ".mp4";
//特别注意 必须新建FileInfo类 否则会替换覆盖
FileInfo file = new FileInfo(video_name);
DirectoryInfo mydir = new DirectoryInfo(video_name);
//如果存在
if (File.Exists(video_name))
{
string s = @"file://" + video_name;
StartCoroutine(Loadimage(s,"video"));
print("有了_视频");
}
else
{
StartCoroutine(DownFile(_video_url, video_name, file));
}
}
//下载文件
IEnumerator DownFile(string url,string name,FileInfo file)
{
WWW www = new WWW(url);
yield return www;
if (www.isDone)
{
Debug.Log("下载完成");
byte[] bytes = www.bytes;
//bytes写入流文件
CreatFile(bytes, file);
//string str = @"file://" + name;
//StartCoroutine(Loadimage(image_name));
}
}
//写入本地流文件
void CreatFile(byte[] bytes,FileInfo file)
{
Stream stream;
stream = file.Create();
stream.Write(bytes, 0, bytes.Length);
stream.Close();
stream.Dispose();
}
//加载本地
public IEnumerator Loadimage(string recordPath,string type_name)
{
WWW www = new WWW(recordPath);
yield return www;
if (www.isDone)
{
if (type_name == "image")
{
Texture2D tex = new Texture2D(www.texture.width, www.texture.height);
www.LoadImageIntoTexture(tex);
Sprite sprite = Sprite.Create(tex, new Rect(0, 0, www.texture.width, www.texture.height), Vector2.zero);
loadsprite.Add(sprite);
}
else if (type_name == "video")
{
MovieTexture mov_tex = www.GetMovieTexture();
load_movietexture.Add(mov_tex);
}
}
}
}
public class DemoText
{
public string id;
public string area;
public string upload_time;
public string location;
public string title;
public string content;
public string type;
public string info;
public string user_tel;
public string user_name;
public string user_pic;
public string comment_count;
public string latlon;
public string like_count;
public string show_count;
public string hot_flags;
public List<string> flags = new List<string>();
public List<string> imgs = new List<string>();
public string video_url;
}