2012-04-24 22 views
1

我有一些帶有附件的EML文件。我解析的EML文件拉出附件,如果我這樣做:MVC3 Razor提供鏈接到內存中的文件(不在磁盤上)

File.WriteAllBytes(attachment.Name,Convert.FromBase64String(attachment.Data))

我得到的附件轉儲到一個文件。我想要做的是有一個鏈接,以便當用戶點擊它時,附件下載。

足夠簡單,如果它的文件已經在磁盤上,但相反,我有這個base64encoded字符串,我可以轉換爲一個字節數組。我怎樣才能採取這個base64encoded字符串(或轉換的字節數組)並直接生成鏈接?

感謝

回答

2

你會從一些其他的操作方法返回回FileResult類數據:

public ActionResult DownloadData(string fileNameOrWhatever) 
{ 
     byte[] fileData = ...; 

     return File(fileData, "someMimeType", "downloadNameToBeDisplayed"); 
} 

你的鏈接,然後將指向這裏:

<a href="/DownloadData/Something">Click me!</a> 
+0

由於一噸 - 這是我用什麼,它的工作原理就像一個魅力。 – user1354486 2012-04-24 19:54:49

0

這是MVC?您可以創建一個返回FileStreamResult控制器方法,創建一個動作鏈接到它,並在寫入數據。

0

我有,我在服務器上創建一個Excel文檔中的項目,用戶將收到該文件作爲當他們導航到特定操作時下載。下面是我使用的代碼,我認爲你可以重構它爲你所需要的:

public void GetExcel(string id) 
    { 
     ExcelPackage p = new ExcelPackage(); 

     //code to add data to the document    

     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.AddHeader("content-disposition", "attachment; filename=BitlyReport.xlsx"); 
     MemoryStream stream = new MemoryStream(p.GetAsByteArray()); 
     Response.OutputStream.Write(stream.ToArray(), 0, stream.ToArray().Length); 

     Response.Flush(); 

     Response.Close(); 
    }