如何使用ASP.NET跟踪下载?
我想找到有多少用户完成了文件下载?
另外如何限制用户使用特定的IP?
例如,如果用户下载http://example.com/file.exe
,该曲目将自动生效。
答案 0 :(得分:3)
如果您想从您的网站计算下载次数,请创建下载页面并计算请求数:
文件链接应如Download.aspx?file=123
protected void Page_Load(object sender, EventArgs e)
{
int id;
if (Int32.TryParse(Request.QueryString["file"], out id))
{
Count(id); // increment the counter
GetFile(id); // go to db or xml file to determine which file return to user
}
}
或Download.aspx?file=/files/file1.exe
:
protected void Page_Load(object sender, EventArgs e)
{
FileInfo info = new FileInfo(Server.MapPath(Request.QueryString["file"]));
if (info.Exists)
{
Count(info.Name);
GetFile(info.FullName);
}
}
限制访问您的下载页面:
protected void Page_Init(object sender, EventArgs e)
{
string ip = this.Request.UserHostAddress;
if (ip != 127.0.0.1)
{
context.Response.StatusCode = 403; // forbidden
}
}
答案 1 :(得分:3)
有几种方法可以做到这一点。这是你如何做到的。
不是使用<a href="http://mysite.com/music/file.exe"></a>
之类的直接链接从磁盘提供文件,而是编写HttpHandler
来提供文件下载。在HttpHandler中,您可以更新数据库中的file-download-count。
文件下载HttpHandler
//your http-handler
public class DownloadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string fileName = context.Request.QueryString["filename"].ToString();
string filePath = "path of the file on disk"; //you know where your files are
FileInfo file = new System.IO.FileInfo(filePath);
if (file.Exists)
{
try
{
//increment this file download count into database here.
}
catch (Exception)
{
//handle the situation gracefully.
}
//return the file
context.Response.Clear();
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
context.Response.AddHeader("Content-Length", file.Length.ToString());
context.Response.ContentType = "application/octet-stream";
context.Response.WriteFile(file.FullName);
context.ApplicationInstance.CompleteRequest();
context.Response.End();
}
}
public bool IsReusable
{
get { return true; }
}
}
Web.config配置
//httphandle configuration in your web.config
<httpHandlers>
<add verb="GET" path="FileDownload.ashx" type="DownloadHandler"/>
</httpHandlers>
从前端链接文件下载
//in your front-end website pages, html,aspx,php whatever.
<a href="FileDownload.ashx?filename=file.exe">Download file.exe</a>
另外,您可以将web.config中的exe
扩展名映射到HttpHandler。要做到这一点,你必须确保,你配置你的IIS将.exe扩展请求转发到asp.net工作进程而不是直接服务,并确保mp3文件不在处理程序捕获的同一位置,如果在同一位置的磁盘上找到该文件,那么HttpHandler将被覆盖并且该文件将从磁盘提供。
<httpHandlers>
<add verb="GET" path="*.exe" type="DownloadHandler"/>
</httpHandlers>
答案 2 :(得分:0)
使用HttpHandler进行下载部分。例如,您可以使用OutputStream。调用此处理程序时,您可以更新数据库中的计数器。
另外如何限制用户使用特定的IP?