ASP.NET 实现Base64文件流下载PDF

因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档

源码部分借鉴网上,具体地址忘记了。

 //Base64文件流 
            byte[] buffer = Convert.FromBase64String(decodedString); 
            System.IO.Stream iStream = new System.IO.MemoryStream(buffer);
            try
            {
                int length;
                long dataToRead;
                string filename = sn + ".pdf";//保存的文件名称
                dataToRead = iStream.Length;
                Response.Clear();
                Response.ClearHeaders();
                Response.ClearContent();
                Response.ContentType = "application/pdf"; //文件类型  
                Response.AddHeader("Content-Length", dataToRead.ToString());//添加文件长度,进而显示进度  
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
                while (dataToRead > 0)
                {
                    if (Response.IsClientConnected)
                    {
                        length = iStream.Read(buffer, 0, 10000);
                        Response.OutputStream.Write(buffer, 0, length);
                        Response.Flush();
                        buffer = new Byte[10000];
                        dataToRead = dataToRead - length;
                    }
                    else
                    {
                        dataToRead = -1;
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write("文件下载时出现错误!");
            }
            finally
            {
                if (iStream != null)
                {
                    iStream.Close();
                }
                //结束响应,否则将导致网页内容被输出到文件,进而文件无法打开   
                Response.Flush();
                Response.End();

            }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏

asp.net 实现一个简单CAS Server

项目代码下载 http://files.cnblogs.com/mobile/cas_demo.zip

1062
来自专栏GreenLeaves

WCF系列教程之WCF客户端调用服务

1、创建WCF客户端应用程序需要执行下列步骤 (1)、获取服务终结点的服务协定、绑定以及地址信息 (2)、使用该信息创建WCF客户端 (3)、调用操作 (4)、...

1999
来自专栏c#开发者

如何给DataGrid添加自动增长列

如何给DataGrid添加自动增长列 我想我们都知道在数据库中如何添加自增长列,我们可以将这个自增长列绑定到DataGrid上使得用户方便的知道现在是第几行,今...

42010
来自专栏跟着阿笨一起玩NET

C#.Net前台线程与后台线程的区别

 if (!this.IsDisposed ) 也是可以的。判断当前窗体是否已经释放。(备注:释放的窗体是不能操作界面UI元素的。)

631
来自专栏GreenLeaves

WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)

1、使用WCF请求与答复模式须知 (1)、客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2)、相比Duplex来讲,这种模式强调的是客户...

20210
来自专栏游戏杂谈

Unity3D MonoBehaviour的生命周期(lifecycle)

官方的事件函数的执行顺序中有详解(Link:Execution Order of Event Functions)

631
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(5)-EF增删改查

前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 回顾上一节的解决方案,我们看出了解决方案中类库的关系 这里要说明一点MVC!=三层 ...

1886
来自专栏恰同学骚年

自己动手模拟开发一个简单的Web服务器

开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此...

1333
来自专栏更流畅、简洁的软件开发方式

一个保存数据的方法(可以切换存放的位置,可以设置密钥)

      在asp.net里面一般的生命周期都比较短,如果想要比较长久的保存数据的话,一般有选择几种方式可供选择,即cookies、ViewState、Ses...

21910
来自专栏个人随笔

体检套餐管理系统 -- List<T>单列集合

本文章为List<T>单列集合开发项目,如需要 Dictionary<K,V>双列集合开发的此项目,请到楼主博客园寻找 博客网址:http://www.cnbl...

3347

扫码关注云+社区