我正在寻找一种方法来保持文件的私密性,因此它们无法公开重新下载,只允许服务器端代码(如按钮)一次性从客户端的私人目录中提取它们。
这甚至可能吗?
即使该文件夹是公开可用的,有什么方法可以触发一个事件,该事件会使文件被下载多少次,这样我就可以跟踪它并制作一个服务,在达到下载限制后删除它们?我想我可以只对文件执行Response.redirect,然后跟踪逻辑以跟踪其下载次数。但是你会这样做吗?
编辑:经过一番挖掘,我找到了解决方案。我知道你们中有很多人因为没有包含示例代码而对此进行了投票,但我很感激你们可以回馈它以分享我最终使用它的代码,因为它运行得很好。String FileName = "File.zip";
String FilePath = "C:/Test/" + FileName; //Replace this
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();
答案 0 :(得分:2)
通过将文件直接写入响应流来通过asp.net泛型处理程序提供文件。然后,您将完全控制对该文件的公共访问。
答案 1 :(得分:0)
我从来没有真正做到这一点,但我知道它是如何完成的。
假设您网站的目录为C:\Sites\DanC\www>
。外界会将此视为www.DanC.com或其他任何内容。
使用名为download.aspx的链接,按钮等为您的下载创建一个网页。
但是,您的文件不在此目录中。您的文件位于:C:\Sites\DanC\data>
某人无法从www.DanC.com上升到您的data
目录。
你看到了吗?
现在,只要有人激活您的下载链接(按钮等),您的代码就会从C:\Sites\DanC\data>
获取该文件并将其提供给客户端。
如何向客户提供数据的一个很好的例子是>> HERE <<。
答案 2 :(得分:0)
经过一番挖掘后,我找到了解决方案。我知道你们中有很多人因为没有包含示例代码而对此进行了投票,但我很感激你们可以回馈它以分享我最终使用它的代码,因为它运行得很好。
String FileName = "File.zip";
String FilePath = "C:/Test/" + FileName; //Replace this
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();