Как транслировать MP3 из действия контроллера ASP.NET MVC - PullRequest
4 голосов
/ 29 октября 2009

У меня есть mp3-файл на моем сайте. Я хочу вывести его в виде представления. В моем контроллере у меня есть:

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

        return View();
}

Но как мне вернуть файл mp3?

Ответы [ 7 ]

9 голосов
/ 29 октября 2009

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

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

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

3 голосов
/ 29 октября 2009

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

 return File(stream.ToArray(), "audio/mpeg", "test.mp3");

Параметр stream должен быть потоком файлов или памятью из файла mp3.

2 голосов
/ 29 октября 2009

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

public ActionResult Stream()
{
    return Redirect("test.mp3");
}
1 голос
/ 19 января 2010
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"));

        }
1 голос
/ 29 октября 2009

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

Фил Хаак создал ActionResult для этого, названный DownloadResult. Вот статья .

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

public ActionResult Download() 
{
  return new DownloadResult 
    { VirtualPath="~/content/mysong.mp3", FileDownloadName = "MySong.mp3" };
}
0 голосов
/ 29 октября 2009

Почему бы не использовать 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") %>
0 голосов
/ 29 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...