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>
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 –