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等文件(非在线打开,绕开插件)相关推荐
- [奇怪的小知识]从网页上下载内嵌的PDF、PPT文件(以Google浏览器为例)
[奇怪的小知识]从网页上下载内嵌的PDF.PPT文件(以Google浏览器为例) 1. 打开谷歌浏览器开发者工具 实操网址 2. 选中Network->Fetch/XHR 3. 刷新网页 刷新网 ...
- 打开excel文件并写入_双击Excel表格文件时只打开程序不能直接打开文件
故障描述:双击EXCEL表格文件时仅打开了excel窗口,对应文件不能直接打开文件 ,需通过文件--打开--选中文件来打开. 打开excel后不显示文件内容 注意事项:遇到此类问题时首先通过" ...
- excel表格文件损坏 无法打开解决方法
如下为错误截图,如果报错相同请按下列步骤进行,如不同,那可以不用看了 修改文件后缀名,将excel表格改为压缩文件(改为.zip)文件 修改完后打开,查看报错信息 我excel表格打不开的原因就是因为 ...
- vue 本地文件下载 pdf excel 等文件
下载本地文档资源 亲测有用 并且兼容ie浏览器 npm install downloadjs // 引入download.js import download from "downloadj ...
- Excel保存文件不能直接打开,打开之后显示灰屏,从左上角的文件中,再找到要打开的文件才能打开?
打开"excel"点击工具中的"选项"再点击"常规"把"忽略其他应用程序"的勾去掉.
- C#在线打开编辑保存Excel文件[pageoffice]
在项目开发过程中,经常会涉及到生成Excel报表,但往往系统只能通过后台生成Excel报表并保存到服务器上,若想在系统中打开Excel文件并进行编辑保存,有些人可能就没有思路了.因此,为了实现Exce ...
- js网页导出excel表格文件
下载地址 js网页导出excel表格文件,没有使用任何第三方js类库,简单的实现table数据导出效果. dd:
- excel多文件查询工具
excel多文件查询 下载地址 1.功能 1.excel多文件查询 支持查询当前目录及子目录所有excel 支持直接选择xslx文件 支持过滤后导出 2.便签功能 支持设置定时任务, 设置文字描述, ...
- java打开pdf文件_[原创]java在线打开PDF文档
步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...
最新文章
- linux硬链接与软链接
- 虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
- jsoup抓取网页报错UnsupportedMimeTypeException
- LeetCode MySQL 1070. 产品销售分析 III(group by 陷阱)
- 最新基于adt-bundle-windows-x86的android开发环境搭建
- eclipse web项目中css无法显示
- 人人商城源码怎么安装MySQL_人人商城插件开发手记
- Java实现生成32位UUID工具类
- iPhone手机屏幕尺寸分辨率一览
- linux系统配置Vim命令,怎么在LINUX操作系统中安装和配置VIM?
- 儿童python编程入门-青少年Python编程入门 PDF 超清版
- 药方的量化方法笔记(学习与尝试):第二回 第一次 药方的拆解 量化方法的形式的发展 对药的量化分析
- android+xposed插件,初探Xposed 插件开发
- 抖音短视频内容该如何创作
- 程序设计入门——C语言 翁恺 第一次单元测试
- 为什么工厂要实现自动化、智能化?
- Verse on Premises 1.0.5IF1发布
- C语言初阶——实用调试技巧
- 天气预报插件使用教程
- 开机一键ghost重装系统如何操作