(一)

如果在迅雷的下载对话框中点取消,则会使用IE的下载,这里的文件又是正确的了:

怀疑迅雷是根据下载对话框中的网址重新请求下载,与发起请求的页面已经无关,而IE又不会把ViewState信息传到迅雷中,导致下载的文件不是想要的Excel页面。

之后又尝试了分段下载的方式,其实也是无效的,因为迅雷根本不理会你提供给它的下载机制,而且这样在Firefox下调用迅雷时,由于分段下载的Viewstate并不包含Excel文件的完整信息,迅雷下载下的也是残缺的文件。

最后只能采用最老土的解决方法:Response.Redirect(),转向实际文件地址。

FileInfo fi = new FileInfo(excelFile);

HttpResponse contextResponse = HttpContext.Current.Response;

contextResponse.Redirect(string.Format("~/Template/{0}", excelName), false);

这样在三个浏览器下测试都正常了,因为请求的是实际文件的地址,在迅雷中显示的也是实际文件的地址。下载就不会出现问题。但这样相当于告知客户端用户文件的实际地址,隐私性不佳。但好在这里并不需要太好的隐私性,而且文件会在一定时间之后删除,所以倒并不是太大的问题了。

上面是第一次考虑的结果,似乎还是有些懒了……

事后考虑,既然每次迅雷实际都是重新请求URL,那么我们就应该给迅雷传入一个能生成Excel文件的URL。

即,在点击“生成Excel”按钮的时候,转向另一个Export页面,在这个页面的Page_Load方法中完成生成Excel文件、下载Excel文件的步骤。

String fileName = Request.QueryString["FileName"];

String exportName = Request.QueryString["Export"];

if(fileName != null)

{

ExportManger.CreateExcel(fileName);//先在服务器端创建Excel文件。

Response.Redirect(String.Format("{0}?Export={1}",Request.Path.ToString(),fileName));//重定向到本页面,但Query参数变为Export。

}

else if(exportName != null)

{

ExportManger.ExportExcel(exportName);//下载Excel文件。

}

这里页面跳转了两次,第一次是生成Excel,第二次是下载Excel。

之所以跳转两次,是因为迅雷会捕获最后的URL,如果生成和下载放在一起进行,那么迅雷下载时会重复再生成一遍Excel文件。下载Excel文件的代码ExportManger.ExportExcel(exportName)就使用了本文开头介绍的Response.Write方法,也可以用分段下载的方法:

if(fi.Length > 0)

{

FileStream sr = new FileStream(fi.FullName,System.IO.FileMode.Open,System.IO.FileAccess.Read, System.IO.FileShare.Read);

int size = 1024;//设置每次读取长度。

for (int i = 0; i < fi.Length / size + 1; i++)

{

byte[] buffer = new byte[size];

int length = sr.Read(buffer, 0, size);

contextResponse.OutputStream.Write(buffer, 0, length);

}

sr.Close();

}

else

{

contextResponse.WriteFile(fi.FullName);

}

这里的结果是只生成了一次Excel并在服务器保留,以后每次下载的时候都使用带"Export"的参数下载相同的文件。那么如果需要文件只是一次性的,每次下载都需要重新生成,则只需要把Export页面的下载和生成放到一起。然后把开头的Response.Write方法最后变成:

contextResponse.Flush();

fi.Delete();

contextResponse.End();

即每次响应清空后把文件先删除,再结束响应。

这样就解决了利用下载工具出现的下载不能的问题,同时保护了服务器文件地址的隐私,并可以采用分段写入的方法写入大文件,而且可以按需要即时删除生成的文件而不占用服务器空间。

(二)

用超级链接就行.

文件名称

target="_blank" 是新打开网页,而不是在当前页跳转.

新建一个download.aspx?filename='aa'页面专门用来下载,并将要下载的文件名传给这个页面,然后在这个页面写以下代码

string filename=Request.QueryString(["filename"]);

FileInfo DownloadFile = new FileInfo("../FILE/"+filename); //设置要下载的文件

if(DownloadFile.isExists)

{

Response.Clear(); //清除缓冲区流中的所有内容输出

Response.ClearHeaders(); //清除缓冲区流中的所有头

Response.Buffer = false; //设置缓冲输出为false

Response.ContentType = "application/octet-stream";//将 HTTP 头添加到输出流

Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));

Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());

Response.WriteFile(DownloadFile.FullName);

Response.Flush(); //向客户端发送当前所有缓冲的输出

Response.End(); //将当前所有缓冲的输出发送到客户端

Response.Close();

}

posted on 2012-10-26 21:09 ** 阅读(115) 评论(0)  编辑  收藏

java迅雷下载excel,Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...相关推荐

  1. 【原】Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...

    这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 生成Excel文件的方法,见:[原].Net创建Excel文件(插入数据.修改格式.生成图表)的方法 先试用Response.W ...

  2. Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...

    这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 生成Excel文件的方法,见:[原].Net创建Excel文件(插入数据.修改格式.生成图表)的方法 先试用Response.W ...

  3. linux qt写入excel文件内容,Qt 读取Excel表格数据 生成Excel表格并写入数据

    Qt 读取Excel表格数据 生成Excel表格并写入数据 Qt 读取Excel表格数据 生成Excel表格并写入数据 修改.pro文件,增加 axcontainer QT += axcontaine ...

  4. Asp.net生成Excel文件并下载(解决使用迅雷下载页面而不是文件的问题)

    这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 先试用Response.WriteFile的方法: FileInfo fi = new FileInfo(excelFile); ...

  5. java导出excel报表_java生成excel报表文件示例

    此次简单的操作将数据从数据库导出生成excel报表以及将excel数据导入数据库 首先建立数据库的连接池: package jdbc; import java.io.FileInputStream; ...

  6. java poi 换行_Java利用POI生成Excel强制换行

    前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了 ...

  7. java ajax 导入excel_Ajax asp.net 导入Excel

    $("#btnUploadExcelSave").click(function () { var fileObj = document.getElementById("f ...

  8. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  9. php 生成excel表格,PHP 生成Excel表格两种方法

    1.使用PHP header()函数  (向浏览器输出Excel,即通过浏览器方式,下载生成的excel) 实例: /** * PHP 使用heade()函数生成excel表格  ExcelName为 ...

最新文章

  1. 阿里云centos 6.5 32位安装可视化界面的方法
  2. 【计算机类】大学生计算机专业常用工具汇总
  3. Oracle迁移数据库
  4. 鸿蒙系统的挑战,简单的讲解下何为鸿蒙系统,可能会挑战你的认知颠覆你的想象...
  5. Linux常用开发环境软件-redis安装
  6. hive工作中分享总结
  7. 好用的idea插件,一个字:真TM太爽了!
  8. Spring Boot最新版集成邮件发送功能大全
  9. (53)FPGA面试题-利用任务task实现单字节乘法功能(Verilog语言实现)
  10. 使用IoC 容器清洁工厂设计模式
  11. 从一句SQL得出的启示
  12. Android: 一个两点触控的案例
  13. PowerPC 汇编
  14. OpenStack Rocky Octavia 的实现与分析(零)架构简介
  15. 《JavaScript语言精粹》笔记(内附《JavaScript语言精粹》百度云下载链接)
  16. UCGUI的消息处理
  17. 14行代码教你制作自己的有道词典单词本(python)
  18. 计算机win7开超级性能模式,笔记本win10系统开启超级性能模式(卓越性能模式)的方法...
  19. 4.2.4 图像色调处理
  20. java导出excel 乱码_java导出excel时出现文件名乱码解决方法

热门文章

  1. 宋体能力从业的一些感悟
  2. FairyGUI个人使用手册 只有重点(1)
  3. AI工具究竟是帮手还是对手?你怎么看,一起来聊聊吧!
  4. 拦截电话--- 关于利用反射 调用系统 hiden的 方法
  5. 揭秘手机游戏厂商怎么赚钱的。
  6. LeetCode刷题之旅正式开始
  7. TikTok三大流行趋势 钛动带你看懂TikTok
  8. webservice的安全问题
  9. PyTorch(13)---优化器_随机梯度下降法
  10. 命运更喜欢将丰硕约果实馈赠给那些含着泪微笑的灵魂