2015-07-06 25 views

Odpowiedz

10

Jednym ze sposobów byłoby dodać nową akcję w kontrolerze, która zwraca dane:

public ActionResult Audio(int someId) 
{ 
    byte[] songBytes; 
    // Add code to get data 
    return new FileStreamResult(songBytes, "audio/mp3"); 
} 

następnie umieścić adres URL, który w atrybucie src:

foreach (var item in Model) 
{ 
    <audio controls> 
     <source src="/Controller/Audio/@item.someId" type="audio/mp3"/> 
    </audio> 
} 
0

Google chrome/Ipad wymaga obsługi żądań zakresu zawartości, więc aby dodać do podanej tutaj odpowiedzi, wykonaj coś takiego:

public FileStreamResult StreamUploadedSongs(int id) 
    { 
     byte[] song = db.UploadedSongs.Where(x => x.Id == id).FirstOrDefault().SongBytes; 

     long fSize = song.Length; 
     long startbyte = 0; 
     long endbyte = fSize - 1; 
     int statusCode = 200; 
     if ((Request.Headers["Range"] != null)) 
     { 
      //Get the actual byte range from the range header string, and set the starting byte. 
      string[] range = Request.Headers["Range"].Split(new char[] { '=', '-' }); 
      startbyte = Convert.ToInt64(range[1]); 
      if (range.Length > 2 && range[2] != "") endbyte = Convert.ToInt64(range[2]); 
      //If the start byte is not equal to zero, that means the user is requesting partial content. 
      if (startbyte != 0 || endbyte != fSize - 1 || range.Length > 2 && range[2] == "") 
      { statusCode = 206; }//Set the status code of the response to 206 (Partial Content) and add a content range header.          
     } 
     long desSize = endbyte - startbyte + 1; 
     //Headers 
     Response.StatusCode = statusCode; 

     Response.ContentType = "audio/mp3"; 
     Response.AddHeader("Content-Accept", Response.ContentType); 
     Response.AddHeader("Content-Length", desSize.ToString()); 
     Response.AddHeader("Content-Range", string.Format("bytes {0}-{1}/{2}", startbyte, endbyte, fSize)); 
     //Data 

     var stream = new MemoryStream(song, (int)startbyte, (int)desSize); 

     return new FileStreamResult(stream, Response.ContentType); 
    } 
Powiązane problemy