2009-10-29 3 views
4

У меня есть mp3-файл на моем сайте. Я хочу вывести его как представление. В моем контроллере у меня есть:Как передать MP3 из ASP.NET MVC Controller Action

public ActionResult Stream() 
{ 
     string file = 'test.mp3'; 
     this.Response.AddHeader("Content-Disposition", "test.mp3"); 
     this.Response.ContentType = "audio/mpeg"; 

     return View(); 
} 

Но как я возвращаю mp3 файл?

ответ

9

Создать действие, как это:

public ActionResult Stream(string mp3){ 
    byte[] file=readFile(mp3); 
    return File(file,"audio/mpeg"); 
} 

Функция ReadFile должна читать MP3 из файла и возвращает его в качестве байт [ ].

+1

Есть ли способ, чтобы поток частичного файла? У меня огромный звуковой файл, который мне нужно передать. Мне нужно, чтобы он был частично загружен пользователю, в то время как он мог играть, останавливаться, искать и т. Д., И весь файл еще не загружен клиенту. – Shimmy

0

Вы должны создать свой собственный класс, который наследуется от ActionResult, here - пример обслуживания изображения.

2

Если ваш MP3-файл находится в доступном для пользователя месте (например, в папке веб-сайта), вы можете просто перенаправить его в mp3-файл. Используйте метод Redirect() на контроллере для достижения этой цели:

public ActionResult Stream() 
{ 
    return Redirect("test.mp3"); 
} 
1

Вы не хотите, чтобы создать представление, вы хотите вернуть mp3 файл в качестве ActionResult.

Phil Haack сделал ActionResult, чтобы сделать это, получив название DownloadResult. Вот article.

Результирующий синтаксис будет выглядеть примерно так:

public ActionResult Download() 
{ 
    return new DownloadResult 
    { VirtualPath="~/content/mysong.mp3", FileDownloadName = "MySong.mp3" }; 
} 
3

Вы должны вернуть FileResult вместо ViewResult:

параметр
return File(stream.ToArray(), "audio/mpeg", "test.mp3"); 

Поток должен быть FileStream или MemoryStream из mp3 файла.

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") %> 
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")); 

     }