我发现这个问题提出了几次,但还没有明确的答案。看起来像一个体面的解决方案可以帮助很多人。
因此,我们在服务器上创建一个excel文件(.xlsx),并使用content-disposition'attachment'将其下载到客户端。如果选择“保存”,或“打开”,然后选择“另存为”,则会出现“打开保存”对话框,一切正常。但是,如果选择“打开”,然后单击“保存...”按钮,则Excel会挂起一会儿,然后显示消息: 由于共享违规,您的更改无法保存到“导出[5] .xlsx”。尝试保存到其他文件。 然后: 您尝试打开的文件“F8CAC020.IE5 \ HM2NBE5C \ F8CAC020”的格式与文件扩展名指定的格式不同。在打开文件之前,请验证文件是否已损坏且是否来自受信任的源。你想现在打开文件吗? 然后: 你最终得到了另存为:对话框(假设你按了'是')。
创建文件的代码是:
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("content-disposition", "attachment;filename=Export.xlsx")
Response.AddHeader("Content-Length", New System.IO.FileInfo(NewFile).Length)
Response.TransmitFile(NewFile)
Response.Flush()
如果删除内容处置标题,则会在Excel中获得正确的行为,但名称错误,并且无法保证Excel文档不会在浏览器中显示(取决于客户端设置)。如果按“打开”,然后按“保存”,则按 得到一条消息: 'default.aspx'是只读的。要保存副本,请单击“确定”,然后在“另存为”对话框中为工作簿指定一个新名称。
所以问题是如何将两种行为合并为一种合理的行为: 当您尝试打开然后保存下载的文件时,直接获取上面的错误消息,同时指定应下载文档并给出默认文件名。
干杯,
詹姆斯
答案 0 :(得分:0)
我认为IE文件下载代码中存在一个错误,该错误不会从Web服务器确认已完成的文件传输(下载),因此在尝试保存时会打开与下载的(临时)文件的连接。这会生成“共享违规”消息。我尝试使用FireFox使用相同的代码,但是我没有得到相同的结果,这肯定会让我相信这是IE特定的问题。
不幸的是,鉴于我认为这是IE中的一个错误,我认为目前没有解决这个问题。