2017-03-10 67 views
1

我有幾個存儲在獨特文件名中的azure blob文件,當客戶端想要下載時,我想重命名爲友好名稱。重命名azure blob文件並下載它

我仍在使用2014 azure存儲dll在我的項目中,我不打算在不久的將來更新它們。所以我不能使用內置的ContentDeposition並重命名它。

我想在我的控制器使用下面的代碼:

 var blob = blobStorage.GetBlobRef("https://mysite.blob.core.windows.net/my-container/WERF3234435FFF_ERFas23E.doc"); 

     MemoryStream memStream = new MemoryStream(); 
     blob.DownloadToStream(memStream); 
     Response.ContentType = blob.Properties.ContentType; 
     Response.AddHeader("Content-Disposition", "Attachment; filename=abcd_New.doc"); 
     Response.AddHeader("Content-Length", blob.Properties.Length.ToString()); 
     Response.BinaryWrite(memStream.ToArray()); 

,但它不是下載文件。

我也是用這個嘗試:

 MemoryStream memStream = new MemoryStream(); 
     blob.DownloadToStream(memStream); 
     System.Web.HttpContext.Current.Response.Clear(); 
     System.Web.HttpContext.Current.Response.ContentType = blob.Properties.ContentType; 
     System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "Attachment; filename=" + friendlyName.doc); 
     System.Web.HttpContext.Current.Response.AddHeader("Content-Length", blob.Properties.Length.ToString()); 
     System.Web.HttpContext.Current.Response.BinaryWrite(memStream.ToArray()); 
     System.Web.HttpContext.Current.Response.End(); 

我有我的業務邏輯在一個單獨的解決方案,讓從那裏到我的主要解決方案的一滴參考。

我錯過了什麼?

+0

您已經標記了這個'asp.net-mvc',但我沒有看到任何MVC嗎? – thmshd

回答

0

當我們談論ASP.NET MVC時,我錯過了代碼中的Controller/Action?在執行ASP.NET MVC時,您不應該自己寫入HttpContext。你有ActionResult

public ActionResult Download() 
{ 
// ... 
    var bytes = memStream.ToArray(); 
    return File(bytes, System.Net.Mime.MediaTypeNames.Application.Octet, "abcd_New.doc"); 
} 

瀏覽器將決定是否打開文件下載或直接在瀏覽器窗口中打開它。如果你想控制,你將需要下面這段代碼調用return File(...方法之前:

var contentDisposition = new System.Net.Mime.ContentDisposition 
{ 
    FileName = "abcd_New.doc", 
    Inline = false // true will try to open in Browser, false will download 
}; 
Response.AppendHeader("Content-Disposition", contentDisposition.ToString()); 
+0

感謝您的回覆。你是對的,我不應該在MVC中使用HttpContext。我嘗試將「內聯」設置爲false,但仍未下載。另外,如果我將它設置爲true,它也不會打開文件。 – SridharDS

0

我們需要刷新我們的響應之後寫了一個文件來響應。我使用您提供的代碼。添加以下代碼後,我可以看到該文件可以從服務器下載。

Response.BinaryWrite(memStream.ToArray()); 

Response.Flush(); 
Response.End();