解析接口数据并按照相应格式进行下载读取应用

8 篇文章 0 订阅
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;


}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值