我正在尝试使用
发送xlsx文件Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/vnd-ms.excel";
Response.TransmitFile(file.FullName);
Response.End();
弹出IE对话框,我可以成功保存文件,然后从文件夹中打开它,工作正常,花花公子。但如果我在IE对话框中单击“打开”,我会收到“无法下载myFile.xlsx”。我单击“重试”并打开Excel但弹出“Excel无法打开文件'myFile.xlsx',因为文件格式或文件扩展名无效...”错误。
我目前正在调试模式下从VS2010运行该站点。
有人知道为什么它会让我保存,但不能直接打开吗?
修改
Chrome只是下载它。 FF尝试打开它但是给出了错误The file you are trying to open, 'myFile.xlsx.xls', is in a different format than specified by the file extension...
我可以选择打开它并且它成功打开,但是处于只读模式。
所以,这里有一些时髦的东西
fileName =“myFile.xlsx”
编辑2
这是在IE 9中。我还尝试了octet-stream
和application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
作为ContentType。
答案 0 :(得分:5)
这是因为您的ContentType错误。使用
Response.ContentType = "application/vnd.ms-excel";
修改强>
如果它不起作用,你可以尝试
FileStream sourceFile = new FileStream(file.FullName, FileMode.Open);
float FileSize;
FileSize = sourceFile.Length;
byte[] getContent = new byte[(int)FileSize];
sourceFile.Read(getContent, 0, (int)sourceFile.Length);
sourceFile.Close();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Length", getContent.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(getContent);
Response.Flush();
Response.End();
答案 1 :(得分:2)
我曾经遇到过同样的问题,并通过修改应用服务器(在本例中为IIS)发送的缓存指令来解决。有时您会在应用程序级别添加标头,以防止在某些情况下保存文件,例如在HTTPS连接中。确保您没有提出相互矛盾的说明。
答案 2 :(得分:1)
我遇到了类似的问题。
原来我是从流的末尾读取的,所以字节数组没有充满任何东西。
在读取流之前将流位置设置为0(sourceFile.Position = 0;)(sourceFile.Read(getContent,0,(int)sourceFile.Length);)为我修复它。
看看是否有帮助。
至于“Response.ContentType”,“application / vnd.ms-excel”对我有用。
FileStream sourceFile = new FileStream(file.FullName, FileMode.Open);
float FileSize;
FileSize = sourceFile.Length;
byte[] getContent = new byte[(int)FileSize];
sourceFile.Position = 0;
sourceFile.Read(getContent, 0, (int)sourceFile.Length);
sourceFile.Close();
Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Length", getContent.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(getContent);
Response.Flush();
Response.End();
答案 3 :(得分:0)
巧合的是,我正好在类似的东西......
用于xlsx的MIME类型为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
,请参阅this question。
答案 4 :(得分:0)
我被这个问题困扰了,特别是文件较长。
在我们的案例中使用Content-Length标头修复了问题。一旦内容超过一定长度,就会出现这个问题。
示例(其中tempsbldr是StringBuilder):
Response.AddHeader("Content-Length",tempsbldr.Length.ToString());