我的网站上有一个mp3文件。我想将其输出为视图。 在我的控制器中,我有:
public ActionResult Stream()
{
string file = 'test.mp3';
this.Response.AddHeader("Content-Disposition", "test.mp3");
this.Response.ContentType = "audio/mpeg";
return View();
}
但是如何返回mp3文件?
答案 0 :(得分:9)
像这样创建一个Action:
public ActionResult Stream(string mp3){
byte[] file=readFile(mp3);
return File(file,"audio/mpeg");
}
函数readFile应该从文件中读取MP3并将其作为byte []返回。
答案 1 :(得分:3)
您应该返回FileResult而不是ViewResult:
return File(stream.ToArray(), "audio/mpeg", "test.mp3");
stream参数应该是mp3文件中的文件流或内存流。
答案 2 :(得分:2)
如果您的MP3文件位于用户可以访问的位置(即在某个网站文件夹中),您只需重定向到mp3文件即可。使用控制器上的Redirect()方法完成此操作:
public ActionResult Stream()
{
return Redirect("test.mp3");
}
答案 3 :(得分:1)
您不想创建视图,您希望将mp3文件作为ActionResult返回。
菲尔·哈克(Phil Haack)做了一个ActionResult来做这件事,称为DownloadResult。这是article。
结果语法如下所示:
public ActionResult Download()
{
return new DownloadResult
{ VirtualPath="~/content/mysong.mp3", FileDownloadName = "MySong.mp3" };
}
答案 4 :(得分:1)
public FileResult Download(Guid mp3FileID)
{
string mp3Url = DataContext.GetMp3UrlByID(mp3FileID);
WebClient urlGrabber = new WebClient();
byte[] data = urlGrabber.DownloadData(mp3Url);
FileStream fileStream = new FileStream("ilovethismusic.mp3", FileMode.Open);
fileStream.Write(data, 0, data.Length);
fileStream.Seek(0, SeekOrigin.Begin);
return (new FileStreamResult(fileStream, "audio/mpeg"));
//return (new FileContentResult(data, "audio/mpeg"));
}
答案 5 :(得分:0)
您应该创建自己的继承自ActionResult的类,here是提供图像的示例。
答案 6 :(得分:0)
为什么不使用Filepathresult?
像这样:
public FilePathResult DownLoad()
{
return new FilePathResult(Url.Content(@"/Content/01.I Have A Dream 4'02.mp3"), "audio/mp3");
}
并创建下载链接:
<%=Html.ActionLink("Download the mp3","DownLoad","home") %>