2010-07-01 9 views
6

Czy istnieje sposób ręcznego/logicznego rejestrowania liczby razy, kiedy dany plik jest dostępny w witrynie ASP. Na przykład mam kilka plików .mp3, które mam na moim serwerze i chciałbym wiedzieć, ile razy każdy plik został odwiedzony.Plik śledzenia Pobierz trafienia/zliczenia w ASP.Net

Jaki jest najlepszy sposób śledzenia tego?

Odpowiedz

12

Tak, Istnieje kilka sposobów, aby to zrobić. Oto jak możesz to zrobić.

zamiast służyć plik mp3 z dysku z bezpośrednim linkiem jak <a href="http://mysite.com/music/song.mp3"></a>, napisać HttpHandler służyć do pobrania pliku. W HttpHandler można zaktualizować liczbę plików do pobrania w bazie danych.

pobieranie pliku 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; } 
    } 
} 

konfiguracji Web.config

//httphandle configuration in your web.config 
<httpHandlers> 
    <add verb="GET" path="FileDownload.ashx" type="DownloadHandler"/> 
</httpHandlers> 

Łączenie plików do pobrania z frontonu

//in your front-end website pages, html,aspx,php whatever. 
<a href="FileDownload.ashx?filename=song.mp3">Download Song3.mp3</a> 

Dodatkowo, możesz odwzorować rozszerzenie mp3 w web.config na HttpHandler. Aby to zrobić, musisz się upewnić, że skonfigurujesz usługi IIS tak, aby przekazywały żądania rozszerzenia .mp3 do procesu roboczego asp.net i nie obsługują bezpośrednio, a także upewnij się, że plik mp3 nie znajduje się w tej samej lokalizacji, w której przechwytywany jest przewodnik, jeśli plik zostanie znaleziony na dysku w tej samej lokalizacji, wówczas HttpHandler będzie nadpisany, a plik zostanie przesłany z dysku.

<httpHandlers> 
    <add verb="GET" path="*.mp3" type="DownloadHandler"/> 
</httpHandlers> 
+0

Wystąpił problem z rozwiązaniem, ale po przeczytaniu tego pokrewnego pytania zostało to naprawione natychmiast: http://stackoverflow.com/questions/460301/httphandler-101-fail –

2

Co można zrobić, jest to, że stworzenie (plik * .ashx) Generic Handler, a następnie uzyskać dostęp do pliku poprzez:

Download.ashx file = somefile.mp3

W programie obsługi można uruchomić kod, zarejestrować dostęp i zwrócić plik do przeglądarki.
Upewnij się, że wykonałeś odpowiednie kontrole bezpieczeństwa, ponieważ może to potencjalnie służyć do uzyskiwania dostępu do dowolnego pliku w twoim katalogu internetowym, a nawet w całym systemie plików!

Jeśli znasz wszystkie pliki są * .mp3, drugą opcją jest dodanie do tego odcinka httpHandlers swojego pliku web.config:

<add verb="GET" path="*.mp3" type="<reference to your Assembly/HttpHandlerType>" /> 

i kod prowadzony w swojej HttpHandler.

1

Problem z używaniem HttpHandler do zliczania pobierania polega na tym, że będzie on uruchamiał się bardzo szybko, gdy ktoś zacznie pobierać twój plik. Ale wiele pająków internetowych, wyszukiwarek itp. Zacznie po prostu pobierać i bardzo szybko je anulować! I zostaniesz zauważony podczas pobierania pliku.

Lepszym sposobem jest utworzenie aplikacji analizującej plik statystyk IIS. Możesz więc sprawdzić ile bajtów użytkownik pobrał.Jeśli bajty są takie same lub większe niż rozmiar plików, oznacza to, że użytkownik pobrał kompletny plik. Inne próby były po prostu próbami.