今天做项目遇到这样一个问题,我在自己的机器测试http下载时,下载的格式是pdf,下载资源没有任何问题,但是今天把项目部署到另一台机上时,却莫名其妙的出现了问题,出现的问题是下载pdf文件,也下载下来了,但是下载的文件大小不对,下载后使用pdf软件打不开,文件,请问大神这是什么原因造成的呢?
那就看你用的哪种方法了,如果服务端直接是动态输出文件流,代码写的不对,就有可能下载不完。如果服务端直接指向文件,一般不会出现这种问题,除非服务端做了下载大小限制。
我的代码是这样写,是动态输出的,是否还有其他的限制。
1 //输出pdf格式 2 if ("pdf".Equals(Docformat)) 3 Context.Response.ContentType = "application/pdf"; 4 //输出xls格式 5 if ("xls".Equals(Docformat)) 6 Context.Response.ContentType = "application/vnd.ms-excel"; 7 Context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", reportPath.Replace("rpt", Docformat))); 8 MemoryStream ms=new MemoryStream (); 9 try 10 { 11 if ("pdf".Equals(Docformat)) 12 ms = (MemoryStream)rd.ExportToStream(ExportFormatType.PortableDocFormat); 13 if ("xls".Equals(Docformat)) 14 ms = (MemoryStream)rd.ExportToStream(ExportFormatType.Excel); 15 } 16 catch(Exception e) 17 { 18 Response.Write("<script> confirm('"+e.Message+"')</script>"); 19 Response.End(); 20 } 21 rd.Dispose(); 22 Context.Response.BinaryWrite(ms.ToArray());
@Company: 这个需要调试的,你这个我看不出来。
@沧海一杰: 在自己的电脑上,是可以下载的并打开成功的,这个如何调试?一般你调试的方法?
@Company: 部署到你的IIS上,然后让它通过局域网下载,你在自己的w3wp.exe中打断点。
@沧海一杰: 我在自己的局域网下载调试了,但是看不到任何结果,
@沧海一杰: 这个调试好像没有任何作用,我在部署到自己的机器上,下载和打开是完全没有问题,只是移植到另一个就会出现这个问题。
@Company: 建议改写你的下载代码,参考微软官方的文件下载方案:
@沧海一杰: VS一般也自带远程调试功能,你可以在本机调试其它机器上部署的代码的。
rd.Dispose();这个是否释放早了,放在BinaryWrite(ms.ToArray());后试试
另外客户端有时使用迅雷等类似加速下载工具也会出现错误
这个rd.Dispose()往后放了,还是不行。依然出现这样的错误。下载的时候没有使用迅雷等加速器,只是在使用浏览器内置的下载功能。
@Company: 使用wireshark(可免费下载)在好的机器和问题机器上抓浏览器发的包看看,之间的差异在哪里,估计可以分析到原因
@2012:这个工具经常在那里使用?
@2012: 我的意思是说这个工具,具体应用到哪个些开发技术中?
@2012: 这个工具我下载了,只是显示IP 什么的,怎么看重要的数据?
@Company: 大概的图解使用参考 http://www.blogjava.net/heyang/archive/2011/04/05/340330.html
这个工具可以看到你的客户端和服务端交互传递的所有数据,你这里主要是看http的内容请求和响应是否存在问题