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();
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值