Как отслеживать загрузки с ASP.NET? - PullRequest
4 голосов
/ 02 августа 2010

Как отслеживать загрузки с ASP.NET?

Я хочу узнать, сколько пользователей завершило загрузку файла?

Также Как можно запретить пользователю доступ с определенного IP-адреса?1006 * например, если пользователь скачает http://example.com/file.exe, дорожка будет работать автоматически.

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Есть несколько способов сделать это.Вот как вы можете это сделать.

Вместо того, чтобы отправлять файл с диска по прямой ссылке, такой как <a href="http://mysite.com/music/file.exe"></a>, напишите HttpHandler для загрузки файла.В HttpHandler вы можете обновить количество скачиваемых файлов в базе данных.

Загрузка файла 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>

Дополнительно , вы можете отобразить расширение exe в Интернете.config для HttpHandler.Для этого вам нужно убедиться, что вы настроили свой IIS для пересылки запросов расширения .exe рабочему процессу asp.net, а не для непосредственного обслуживания, а также убедитесь, что mp3-файл не находится в том же месте, что и обработчик,если файл найден на диске в том же месте, то HttpHandler будет перезаписан, и файл будет отправлен с диска.

<httpHandlers>
    <add verb="GET" path="*.exe" type="DownloadHandler"/>
</httpHandlers>
3 голосов
/ 02 августа 2010

Если вы хотите рассчитывать загрузки с вашего сайта, создайте страницу загрузки и подсчитайте количество запросов:

Ссылки на файлы должны выглядеть следующим образом: 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
     }
}
0 голосов
/ 02 августа 2010

Используйте HttpHandler для загрузки части.Например, вы можете использовать OutputStream .Когда вызывается этот обработчик, вы можете обновить счетчик в базе.* HttpModule: взгляните на эти образцы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...