2012-04-24 6 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

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(); 
    }