2017-02-15 64 views
2

我在我的ASP.NET項目中下載了代碼功能,下載代碼如下所示。下載文件 - 防止第二次下載,直到第一次完成

public class Download : IHttpHandler 
{  
    private void DownloadPsListingProduct(Guid which) 
    { 
     string path = GetFilePathFromGuid(which); 

     FileInfo file = new FileInfo(path); 
     HttpResponse response = HttpContext.Current.Response;   
     response.ClearContent(); 
     response.Clear(); 

     response.ContentType = "application/octet-stream";   
     response.AddHeader("Content-Disposition", 
          "attachment;filename=\"" + file.Name.NeutralizationCrlfSequences() + "\";"); 

     response.TransmitFile(file.FullName); 
     response.Flush(); 
     response.End(); 

    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

當我一次下載單個文件時,此代碼就像一個魅力。 但是,在一個文件正在下載的過程中,請求下載其他文件時,首先等待第一個文件下載完成,然後第二個文件下載開始。

注意:我發送新的請求來下載每個文件。

我想避免這種單個文件的下載行爲,用戶應該能夠下載文件而無需等待以前的文件完成。

+1

您是否希望*一次一個文件的行爲,還是您試圖避免它? –

+0

@TomasLycken我試圖避免它。 – imlim

+0

如果您的處理程序被標記爲需要會話狀態,但我認爲這種行爲有點期待,但在這裏似乎不是這種情況。這是真正的代碼嗎? –

回答

0

ASP.NET Web API 2應該能夠以很少的儀式來處理這個問題。這裏有一個例子here,但我會再次重申的重要組成部分:

public class FilesController : ApiController 
{ 
    public IHttpActionResult(Guid fileId) 
    { 
     var filePath = GetFilePathFromGuid(fileId); 
     var fileName = Path.GetFileName(filePath); 
     var mimeType = MimeMapping.GetMimeMappting(fileName); 
     return OkFileDownloadResult(filePath, mimeType, fileName, this); 
    } 
} 

當然,在的ASP.NET Web API 2掛鉤路由等是掛鉤的IHttpHandler很大的不同,但也有一個互聯網上的大量例子(包括在這裏)就如何開始。

+0

我有ASP.NET項目。我是否必須創建單獨的Web API項目?或者我可以在同一個ASP.NET網站使用urlrewrite做什麼? – imlim

+0

@imlim你應該可以毫無問題地將Web API控制器添加到你的網站項目中。看看文檔 - 這裏有很多指南:https://www.asp.net/mvc –

相關問題