让客户端从不可公开访问的路径下载文件?

时间:2011-12-30 22:57:49

标签: c#

我正在寻找一种方法来保持文件的私密性,因此它们无法公开重新下载,只允许服务器端代码(如按钮)一次性从客户端的私人目录中提取它们。

这甚至可能吗?

即使该文件夹是公开可用的,有什么方法可以触发一个事件,该事件会使文件被下载多少次,这样我就可以跟踪它并制作一个服务,在达到下载限制后删除它们?我想我可以只对文件执行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();

3 个答案:

答案 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();