unity 下载 文件保存到本地

1.打开对话框 要引用 System.Windows.Forms 注意 区分32 和64位2. System.Windows.Forms 放在Plugins文件夹下,同时需要更改.net 2.0 Subset为.net2.0 

代码 :



using System;

using System.Collections;

using System.Collections.Generic;

using System.Diagnostics;

using System.IO;

using System.Net;

using System.Windows.Forms;

using UnityEngine;

using UnityEngine.Networking;

public class DownloadFile : MonoBehaviour {

    // Use this for initialization

    void Start()

    {

    }

    IEnumerator GetPicData()

    {

        using (WWW www = new WWW("http://192.168.137.1:8001/pic/n.jpg"))

        {

            yield return www;

//获取下载的文件名

string fileinfo=www.responseHeaders["Content-Disposition"];

string key="filename=";

string fileName=fileinfo.Substring(fileinfo.LastIndexOf(key).Replace(key,""));

            Stream inStream = new MemoryStream(www.bytes);//获取http

            FileTool.SaveFileInfo saveFileInfo = new FileTool.SaveFileInfo();

            saveFileInfo.inStream = inStream;

            saveFileInfo.fileName =fileName;

            saveFileInfo.fileTittle = "保存图片";

            saveFileInfo.fileFilter = FileTool.FileFilter.pic;

            FileTool.OpenDialog(saveFileInfo);

        }

    }

    IEnumerator GetExcelData()

    {

        using (WWW www = new WWW("http://192.168.137.1:8001/excel/new.xls"))

        {

            yield return www;         

//获取下载的文件名

string fileinfo=www.responseHeaders["Content-Disposition"];

string key="filename=";

string fileName=fileinfo.Substring(fileinfo.LastIndexOf(key).Replace(key,""));

            Stream inStream = new MemoryStream(www.bytes);//获取http

            FileTool.SaveFileInfo saveFileInfo = new FileTool.SaveFileInfo();

            saveFileInfo.inStream = inStream;

            saveFileInfo.fileName = fileName;

            saveFileInfo.fileTittle = "保存文件";

            saveFileInfo.fileFilter = FileTool.FileFilter.excel;

            FileTool.OpenDialog(saveFileInfo);

        }

    }

    // Update is called once per frame

    void Update () {

if (Input.GetKeyUp(KeyCode.B))

{

            StartCoroutine(GetExcelData());

        }

        if (Input.GetKeyUp(KeyCode.C))

        {

            StartCoroutine(GetPicData());

        }

    }

}



using System.Collections;

using System.Collections.Generic;

using System.Diagnostics;

using System.IO;

using System.Windows.Forms;

using UnityEngine;

public class FileTool

{

    public static void OpenDialog(SaveFileInfo saveFileInfo)

    {

        using (SaveFileDialog saveFile = new SaveFileDialog())

        {

            saveFile.FileName = saveFileInfo.fileName;

            saveFile.Title = saveFileInfo.fileTittle;

            saveFile.Filter = saveFileInfo.fileFilter;

            saveFile.InitialDirectory = saveFileInfo.fileInitialDirectory;

            if (saveFile.ShowDialog() == DialogResult.OK)

            {

                using (Stream s = saveFile.OpenFile())

                {

                    WriteFile(saveFileInfo.inStream, s);

                }

                string Savepath = Path.GetDirectoryName(saveFile.FileName);

                Process.Start(Savepath);

            }

        }

    }

    /// <summary>

    /// 将二进制写入文件

    /// </summary>

    /// <param name="inStream">输入流</param>

    /// <param name="outStream">输出流</param>

    public static void WriteFile(Stream inStream, Stream outStream)

    {

        byte[] b = new byte[1024];

        int readCount = inStream.Read(b, 0, b.Length);//读流

        while (readCount > 0)

        {

            outStream.Write(b, 0, readCount);//写流

            readCount = inStream.Read(b, 0, b.Length);//再读流

        }

        outStream.Close();

        inStream.Close();

    }

    /// <summary>

    /// 打开对话框 保存文件 所填写的信息

    /// </summary>

    public class SaveFileInfo

    {

        /// <summary>

        /// 需要保存的文件名

        /// </summary>

        public string fileName;

        /// <summary>

        /// 对话框标题

        /// </summary>

        public string fileTittle;

        /// <summary>

        /// 文件过滤器 例如: “标签1|*.jpg|标签2|.png|标签3|.gif”

        /// </summary>

        public string fileFilter;

        /// <summary>

        /// 需要保存文件初始化的目录

        /// </summary>

        public string fileInitialDirectory;

        /// <summary>

        /// 获取的文件二进制流

        /// </summary>

        public Stream inStream;

    }

    public class FileFilter

    {

        /// <summary>

        /// 图片过滤器

        /// </summary>

        public const string pic = "图片|*.jpg;*.png;*.gif;*.jpeg;*.bmp,";

        /// <summary>

        /// Excel过滤器

        /// </summary>

        public const string excel = "Excel files(*.xls)|*.xls|All files(*.*)|*.*";

        /// <summary>

        /// 音频 过滤器

        /// </summary>

        public const string audio = "音频文|*.mp3;*.wma;*.aac;*.midi;*.wav;*.aaa;*.bbb;*.ccc";

    }

}


demo下载地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ```java /* * Copyright (C) 2006 The Android Open Source P...
    mrganer阅读 4,842评论 0 50
  • adasd a uploadFileFromNativesduploadFileFromNativeuploadF...
    betterTry阅读 3,828评论 0 1
  • ``` /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject ...
    非专业码农阅读 2,701评论 0 0
  • 世上最牢固的感情 不是,我爱你 而是你习惯了有他 彼此依赖,才是最深的相爱 一个人对你的好 并不是立刻就能看到的 ...
    信仰YHY阅读 1,670评论 0 1
  • 如何阻止表单提交: JS中Array中如何增加数据: unshift:将参数添加到原数组开头,并返回数组的长度po...
    指尖核心阅读 1,898评论 0 0