asp.net检查一个来自Response.OutputStream的文件是否被保存/打开

我正在build立一个Excel文件(使用EPPLUS)的网页上,该文件提供了保存或打开文件的选项。

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment; filename=Excel_List.xlsx"); package.SaveAs(Response.OutputStream); Response.End(); 

这工作正常。 我只是想知道如何检查用户是否打开/保存文件? 有没有事件?

最简单的答案是你不能。 一旦服务器把文件交给客户端,ASP.NET就无法控制它。

理论上,您可以在Excel文件中放置一个macros来调用服务器上的URL,但这是假定用户打开Excel文件并允许执行macros(在现代Excel版本中禁用该macros)。

你无法确定它。 生成输出后,您无法了解下载过程或用户对下载文件采取的操作。 这主要是由于浏览器安全限制造成的。

不,这不是HTTP的用途。 如果您可以成功发送来自服务器的所有数据,您可能会认为客户端已收到全部数据。 然后,客户可以丢弃,保存,打印,复制,做任何他们喜欢的数据。

如果你想执行这样的检查,你应该从Excel文件本身。 但是,那么你不应该,因为隐私。 如果我曾经遇到过打电话给家里的Excel文件,我不知道会发生什么。

我们无法知道他们是否真的在Excel中打开它,而不是将macros添加到文件中,但是有多种方法可以向服务器发送确认成功完成下载的确认。 为此,您需要在浏览器中embedded一个胖客户端来处理HTTP请求,而不是单独使用浏览器。 像SoftArtisans XFile可以用于这个。 我们的.NET Excel库也带有一个可以pipe理下载过程的ActiveX控件(称为OfficeWriter Assistant )。

免责声明:我为SoftArtisans工作