Odr*_*ade 15 c# asp.net mime-types
我正在研究一些生成Excel电子表格服务器端的代码,然后将其下载到用户.我正在使用ExcelPackage生成文件.
这一代工作得很好.我可以使用Excel 2007打开生成的文件,没有任何问题.但是,我无法下载文件Response.TransmitFile()
.
现在,我有以下代码:
//Generate the file using ExcelPackage
string fileName = generateExcelFile(dataList, "MyReportData");
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.ContentType = "application/vnd.xls"
Response.Charset = "";
Response.TransmitFile(fileName);
Run Code Online (Sandbox Code Playgroud)
当Excel 2007打开如上所下载的文件时,它会提供"文件格式与扩展名不匹配"警告.单击警告后,Excel将显示该文件的原始xml内容.
如果我更改文件扩展名,就像这样
Response.AddHeader("content-disposition", "attachment;filename=FileName.xlsx");
Run Code Online (Sandbox Code Playgroud)
Excel 2007提供"Excel在文件中找到不可读的内容"错误,然后是一个对话框,提供在Web上查找转换器.如果我点击"否",该对话框上的Excel 是能够加载数据.
我还尝试了不同的MIME类型,例如application/vnd.ms-excel
和application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xls和.xlsx的文件扩展名.所有组合都导致上述两种行为之一.
在此方案中使用的文件扩展名和MIME类型的正确组合是什么?除了不正确的MIME类型或扩展名之外,还有什么可能导致此失败?
仅供参考,这是Visual Studio的内置开发Web服务器.我还没有尝试使用IIS.
Bra*_*olz 16
我不能肯定地说你的方法有什么问题,但我会从做类似的事情中分享一些观察结果.
标题是Pascal Case,大多数浏览器都不应该关心,但我会将您的内容更改为Content-Disposition.更改Charset不应该是必要的或相关的.你的内容类型应该没问题,我只会使用application/vnd.openxmlformats-officedocument.spreadsheetml.sheet和.xlsx,如果这实际上是文件的内容,否则坚持使用application/vnd.ms-excel和.xls.
您应该考虑的另一件事是向浏览器发送Content-Length:
Response.AddHeader("Content-Length", new System.IO.FileInfo("FileName.xlsx").Length);
Run Code Online (Sandbox Code Playgroud)
您是否尝试过多个浏览器?只是想知道这是否是供应商特定的问题.
作为最后的努力,您可以将Content-Type设置为application/octet-stream,并且任何浏览器都应该提供下载它,然后大多数浏览器将允许您在根据扩展名下载后打开它.
归档时间: |
|
查看次数: |
31658 次 |
最近记录: |