MVC3 Razor提供内存中文件的链接(不在磁盘上)

时间:2012-04-24 18:37:38

标签: c# asp.net-mvc-3 razor eml

我有一些附件的EML文件。我解析了拉出附件的EML文件,如果我这样做:

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

我将附件转储到文件中。我想要做的是有一个链接,以便当用户点击它时,附件下载。

如果它的文件已经在磁盘上就足够了,但是我有这个base64encoded字符串,我可以将其转换为字节数组。如何获取此base64encoded字符串(或转换后的字节数组)并直接生成链接?

谢谢

3 个答案:

答案 0 :(得分:2)

您将使用其他一些操作方法中的数据返回FileResult类:

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

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

您的链接将指向此处:

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

答案 1 :(得分:0)

这是MVC吗?您可以创建一个返回FileStreamResult的控制器方法,创建一个链接到它的操作并将数据写入。

答案 2 :(得分: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();
    }