我们有一个ASP.NET应用程序,它使用Response.WriteFile动态生成Excel文档并将它们流式传输到客户端,请参阅下面的代码。请注意,一旦将文件写入客户端,就会删除该文档。因此,服务器上不会留下任何文件。
但是,我的客户端用户现已全部升级到Office 2010,现在文档将在“受保护的视图”中打开。要编辑文档,用户必须先单击“启用编辑”。这被用户认为是不可接受的。 发生这种情况的原因是流式文档被放置在Internet临时文件中,这被认为是“可能不安全的位置”。此类位置的文档在受保护的视图中打开。我只是希望有办法解决这个问题。
理论上,我可以将文档放在可从客户端访问的文件夹中,然后重定向到文档。 但是,此解决方案不是一种选择。首先,由于文档将留在服务器上,因此其他用户可以访问它,这是一个问题,因为文档可能包含机密数据。 还有其他原因导致这不是一个可用的选项。
其他理论解决方法是要求所有用户禁用“为位于可能不安全的位置的文件启用受保护的视图”设置。当然,这也不是一种选择。
那么,简而言之,在使用下面描述的流媒体技术时,无论如何都要避免在“受保护的视图”中打开文档?
Response.Buffer = true;
Response.Clear();
Response.AddHeader("Pragma", "no-cache");
Response.Expires = 0;
Response.AddHeader("Content-Type", contentType);
Response.AddHeader("Content-Disposition", "attachment; filename=" + proposedFilename);
Response.WriteFile(dstFullPathName);
Response.Flush();
Response.Close();
File.Delete(dstFullPathName);
HttpContext.Current.ApplicationInstance.CompleteRequest();