C#下载http/https的pdf、excel等文件(非在线打开,绕开插件)
非本服务器文件,如PDF,excel等,下载一般是通过href=‘远程文件的http或者https’的方式下载,但是如果浏览器已经有PDF插件了,则用href不是下载,而是在线打开了,影响体验,所以远程服务器文件下载改为后台的方式下载,可以绕开插件。代码如下:
string url = hidFilePath.Value;//文件的地址:如http://emec.h.c/pdf/test.pdf
string filename = hidFileName.Value;//导出的文件名称:如测试导出文件
//处理后缀
string[] _filename = url.Split('.');//得到文件后缀
long remoteFileLength = GetHttpLength(url);// 取得远程文件长度
if (remoteFileLength == 745 || remoteFileLength == 0)
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "js", "<script>alert('远程文件不存在');</script>");
return;
}
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
//发送请求并获取相应回应数据
HttpWebResponse response = myRequest.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求 向服务器请求,获得服务器的回应数据流
Stream readStream = response.GetResponseStream();
readStream.Flush();
HttpContext curContext = HttpContext.Current;
curContext.Response.ContentType = "application/pdf";//设置类型
curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename + "." + _filename[_filename.Length - 1], System.Text.Encoding.UTF8));
curContext.Response.AddHeader("Content-Length", remoteFileLength.ToString());
byte[] btArray = new byte[512];//一次最多读取不能超过1024 此处设512
byte[] _btArrary = new byte[remoteFileLength + 512];//防止溢出
int currPostion = 0;
int contentSize = readStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次
while (contentSize > 0)// 如果读取长度大于零则继续读
{
btArray.CopyTo(_btArrary, currPostion);
currPostion += contentSize;
contentSize = readStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取
}
curContext.Response.BinaryWrite(_btArrary);
curContext.Response.End();
readStream.Close();
// 从文件头得到远程文件的长度
private static long GetHttpLength(string url)
{
long length = 0;
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接
HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
if (rsp.StatusCode == HttpStatusCode.OK)
{
length = rsp.ContentLength;// 从文件头得到远程文件的长度
}
rsp.Close();
return length;
}
catch (Exception e)
{
return length;
}
}
C#下载http/https的pdf、excel等文件(非在线打开,绕开插件)的更多相关文章
- C# 判断(Excel)文件是否已经打开
using System.IO; using System.Runtime.InteropServices; [DllImport("kernel32.dll")] publi ...
- [转载]Java在线打开PDF文档
步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...
- [原创]java在线打开PDF文档
步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...
- Jacob工具类使用文件互转服务 word转html html转excel word转pdf excel转pdf ppt转pdf
前提条件 必须安装MS office 1.jdk使用jdk1.8 2.jacob.dll放在..\jdk1.8\jre\bin目录下 3.eclipse的jre版本要和jdk一致,window-&g ...
- Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)
功能说明 输入文件路径,在浏览器输出文件预览信息,经测试极速(Chrome).IE9.Firefox通过 分类文件及代码说明 DemoFiles 存放可测试文件 Default.aspx 启动页 ...
- Android遍历获取Office格式(Word,Excel,PPT,PDF)的文件并打开
此案例主要是模仿QQ加载WPS(Word,Excel,PPT)本地文件可打开查看,使用ListView加载,使用线程扫描SD卡下所有目录加载指定的Word,Excel,PPT等格式的文件,ListVi ...
- python下载网页转化成pdf
最近在学习一个网站补充一下cg基础.但是前几天网站突然访问不了了,同学推荐了waybackmachine这个网站,它定期的对网络上的页面进行缓存,但是好多图片刷不出来,很憋屈.于是网站恢复访问后决定把 ...
- 纯前端下载pdf链接文件,而不是打开预览的解决方案
纯前端下载pdf链接文件,而不是打开预览的解决方案 一,介绍与需求 1.1,介绍 XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行 ...
- 下载网页中的 pdf 各种姿势,教你如何 carry 各种网页上的 pdf 文档。
关联词: PDF 下载 FLASH 网页 HTML 报告 内嵌 浏览器 文档 FlexPaperViewer swfobject. 这个需求是最近帮一个妹子处理一下各大高校网站里的 PDF 文档下载, ...
随机推荐
- Mybatis 中的<![CDATA[ ]]>浅析
在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]&g ...
- js中更改this指向 以及回顾bind、call和apply
1.更改this指向 方法1:对this进行保存 var _this = this; 例: var _this = this; document.onclick = fu ...
- 关于《Selenium3自动化测试实战--基于python语言》
2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...
- tesseract4.0:win10 +x64+vs2015 源码安装(ViewerDebugging)安装记录
参考文章: https://blog.csdn.net/u013985291/article/details/78295789 https://blog.csdn.net/u013985291/art ...
- CNN中1x1 卷积的处理过程及作用
参看:https://blog.csdn.net/ybdesire/article/details/80314925
- Oracle数据库之四 简单查询
四.简单查询 简单查询的主要特征就是将一张数据表之中的全部数据行进行显示,而后可以利用 SELECT 子句来控制所需要的输出列. 4.1.基础语法 范例:查询 emp 表中的数据(全部数据查询) ...
- Asp.NetCore源码学习[1-2]:配置[Option]
Asp.NetCore源码学习[1-2]:配置[Option] 在上一篇文章中,我们知道了可以通过IConfiguration访问到注入的ConfigurationRoot,但是这样只能通过索引器IC ...
- 9406LaTeX公式
需要注意的是: 1.本文只对第四章排版数学公式进行简单整理 2.本文大量内容直接引自官网,尤其是涉及4.开头的标题,为方便读者查阅对比,就不一一删改和引注,你可以点此访问官网对应内容,也可以点此下载我 ...
- 设置ABP默认使用中文
ABP提供的启动模板, 默认使用是英文: 虽然可以通过右上角的菜单切换成中文, 但是对于国内项目来说, 默认使用中文是很正常的需求. 本文介绍了如何实现默认语言的几种方法, 希望能对ABP爱好者有所帮 ...
- Python实现的一些常见简单问题(持续更新)
提纲: 1.汉诺塔 2.找到某个范围内的所有质数 3.杨辉三角 4.用闭包实现一个计数器,调用一次计数器加1 5.将类构造成可迭代对象,实现斐波那契数列 ...... 1.汉诺塔(汉诺塔) 用递归函数 ...