非本服务器文件,如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等文件(非在线打开,绕开插件)相关推荐

  1. [奇怪的小知识]从网页上下载内嵌的PDF、PPT文件(以Google浏览器为例)

    [奇怪的小知识]从网页上下载内嵌的PDF.PPT文件(以Google浏览器为例) 1. 打开谷歌浏览器开发者工具 实操网址 2. 选中Network->Fetch/XHR 3. 刷新网页 刷新网 ...

  2. 打开excel文件并写入_双击Excel表格文件时只打开程序不能直接打开文件

    故障描述:双击EXCEL表格文件时仅打开了excel窗口,对应文件不能直接打开文件 ,需通过文件--打开--选中文件来打开. 打开excel后不显示文件内容 注意事项:遇到此类问题时首先通过" ...

  3. excel表格文件损坏 无法打开解决方法

    如下为错误截图,如果报错相同请按下列步骤进行,如不同,那可以不用看了 修改文件后缀名,将excel表格改为压缩文件(改为.zip)文件 修改完后打开,查看报错信息 我excel表格打不开的原因就是因为 ...

  4. vue 本地文件下载 pdf excel 等文件

    下载本地文档资源 亲测有用 并且兼容ie浏览器 npm install downloadjs // 引入download.js import download from "downloadj ...

  5. Excel保存文件不能直接打开,打开之后显示灰屏,从左上角的文件中,再找到要打开的文件才能打开?

    打开"excel"点击工具中的"选项"再点击"常规"把"忽略其他应用程序"的勾去掉.

  6. C#在线打开编辑保存Excel文件[pageoffice]

    在项目开发过程中,经常会涉及到生成Excel报表,但往往系统只能通过后台生成Excel报表并保存到服务器上,若想在系统中打开Excel文件并进行编辑保存,有些人可能就没有思路了.因此,为了实现Exce ...

  7. js网页导出excel表格文件

    下载地址 js网页导出excel表格文件,没有使用任何第三方js类库,简单的实现table数据导出效果. dd:

  8. excel多文件查询工具

    excel多文件查询 下载地址 1.功能 1.excel多文件查询 支持查询当前目录及子目录所有excel 支持直接选择xslx文件 支持过滤后导出 2.便签功能 支持设置定时任务, 设置文字描述, ...

  9. java打开pdf文件_[原创]java在线打开PDF文档

    步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...

最新文章

  1. linux硬链接与软链接
  2. 虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
  3. jsoup抓取网页报错UnsupportedMimeTypeException
  4. LeetCode MySQL 1070. 产品销售分析 III(group by 陷阱)
  5. 最新基于adt-bundle-windows-x86的android开发环境搭建
  6. eclipse web项目中css无法显示
  7. 人人商城源码怎么安装MySQL_人人商城插件开发手记
  8. Java实现生成32位UUID工具类
  9. iPhone手机屏幕尺寸分辨率一览
  10. linux系统配置Vim命令,怎么在LINUX操作系统中安装和配置VIM?
  11. 儿童python编程入门-青少年Python编程入门 PDF 超清版
  12. 药方的量化方法笔记(学习与尝试):第二回 第一次 药方的拆解 量化方法的形式的发展 对药的量化分析
  13. android+xposed插件,初探Xposed 插件开发
  14. 抖音短视频内容该如何创作
  15. 程序设计入门——C语言 翁恺 第一次单元测试
  16. 为什么工厂要实现自动化、智能化?
  17. Verse on Premises 1.0.5IF1发布
  18. C语言初阶——实用调试技巧
  19. 天气预报插件使用教程
  20. 开机一键ghost重装系统如何操作

热门文章

  1. 一起来盘一盘,建站市场上主流的建站平台哪个更好用
  2. 成都传智播客Java、android培训
  3. 用 Python 做游戏
  4. 创见ts服务器硬盘,创见隆重推出IDE镜像磁盘阵列--TS-R200D
  5. Vue实现购物车(非常简洁)
  6. Linux下制作本地yum源
  7. 2020年蜀山区青少年信息学竞赛小学组试题
  8. OpenCV(一) 主要模块及结构功能简述
  9. 软件版本和实际有出入导致的后果_软件缺陷导致严重后果的典型案例
  10. 2014-11艺龙招聘笔试面试