您的位置:首页 > 编程语言 > C#

下载文件和将文件转换为数据流下载的示例C#

2016-02-04 12:43 363 查看
下载文件和将文件转换为数据流下载的示例C#

 

protected void Page_Load(object sender, EventArgs e)

    {

        string file = Request["file"];

        if (string.IsNullOrEmpty(file))

            return;

        string filepath = Server.MapPath("~/Download/" + file);

        if (File.Exists(filepath))

            //DownLoadStreamFile(filepath);

            ToOpen(filepath, "");

        Response.End();

    }

    /// <summary>

    /// 下载文件

    /// </summary>

    /// <param name="serverfilpath"></param>

    /// <param name="filename"></param>

    public static void ToDownload(string serverfilpath, string filename)

    {

        FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);

        long fileSize = fileStream.Length;

        HttpContext.Current.Response.ContentType = "application/octet-stream";

        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=/"" + UTF_FileName(filename) + "/";");

        ////attachment --- 作为附件下载

        ////inline --- 在线打开

        HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());

        byte[] fileBuffer = new byte[fileSize];

        fileStream.Read(fileBuffer, 0, (int)fileSize);

        HttpContext.Current.Response.BinaryWrite(fileBuffer);

        fileStream.Close();

        HttpContext.Current.Response.End();

    }

    /// <summary>

    /// 打开文件

    /// </summary>

    /// <param name="serverfilpath"></param>

    /// <param name="filename"></param>

    public static void ToOpen(string serverfilpath, string filename)

    {

        FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);

        long fileSize = fileStream.Length;

        HttpContext.Current.Response.ContentType = "application/octet-stream";

        HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=/"" + UTF_FileName(filename) + "/";");

        HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());

        byte[] fileBuffer = new byte[fileSize];

        fileStream.Read(fileBuffer, 0, (int)fileSize);

        HttpContext.Current.Response.BinaryWrite(fileBuffer);

        fileStream.Close();

        HttpContext.Current.Response.End();

    }

    private static string UTF_FileName(string filename)

    {

        return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);

    }

    /// <summary>

    /// 下载文件数据流

    /// </summary>

    /// <param name="serverfilpath"></param>

    public static void DownLoadStreamFile(string serverfilpath)

    {

        int blocksize = 1024 * 100;

        byte[] buffer = new byte[blocksize];

        byte[] fileHeader = new byte[101];

        int startindex = 0;

        int bytesread = 0;

        int bytesfinish = 0;

        int filesize = 0;

        string headerText = string.Empty;

        BinaryReader bReader = null;

        bReader = new BinaryReader(File.OpenRead(serverfilpath));

        filesize = Convert.ToInt32(bReader.BaseStream.Length);

        while (bytesfinish < filesize)

        {

            if (bytesfinish + blocksize < filesize)

                bytesread = bReader.Read(buffer, startindex, blocksize);

            else

                bytesread = bReader.Read(buffer, startindex, filesize - bytesfinish);

            bytesfinish += bytesread;

            HttpContext.Current.Response.OutputStream.Write(buffer, 0, bytesread);

        }

        bReader.Close();

        HttpContext.Current.Response.End();

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: