关于我在 Chrome 音频播放器中寻找文件下载中断的管理方式
Something about the way I'm managing this file download breaks seeking in Chrome audio player
我有一个 MVC 5 控制器操作,可以检索音频数据并将其下载到客户端。以前是一些 aspx.cs 代码在我将其更新为以下内容之前有其自身的问题:
// Support byte range headers for Chrome:
long fSize = audio.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] != "") {
// Set the status code of the response to 206 (Partial Content) and add a content range header.
statusCode = 206;
}
}
long desSize = endbyte - startbyte + 1;
// Headers
Response.StatusCode = statusCode;
Response.ContentType = "audio/mp3";
if (AudioIsWAV(audio)) {
Response.ContentType = "audio/wav";
}
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));
// Send the Data
var stream = new MemoryStream(audio, (int)startbyte, (int)desSize);
return new FileStreamResult(stream, Response.ContentType);
自从我将动作更新为这个之后,除了 Chrome 的音频播放器无法再搜索之外,它在所有方面都运行得更好。当您尝试调整您在文件中的位置时,它总是跳回到开头。
我在研究中发现的最接近的问题如下: 问题被确定为损坏的文件。然而,在我调整它们的发送方式之前,文件本身已经工作了。
它在其他浏览器中运行良好,当我将不同的源放入同一播放器时,它也能正常运行。我相信我从这里发送的文件一定有问题。
上面的文章给了我一个尝试的想法。我将我的状态代码更改为 206
即使我正在发送文件的整个范围,并且修复了它。出于某种原因,状态代码 200
中断了在 chrome 的音频播放器中的搜索。
我有一个 MVC 5 控制器操作,可以检索音频数据并将其下载到客户端。以前是一些 aspx.cs 代码在我将其更新为以下内容之前有其自身的问题:
// Support byte range headers for Chrome:
long fSize = audio.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] != "") {
// Set the status code of the response to 206 (Partial Content) and add a content range header.
statusCode = 206;
}
}
long desSize = endbyte - startbyte + 1;
// Headers
Response.StatusCode = statusCode;
Response.ContentType = "audio/mp3";
if (AudioIsWAV(audio)) {
Response.ContentType = "audio/wav";
}
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));
// Send the Data
var stream = new MemoryStream(audio, (int)startbyte, (int)desSize);
return new FileStreamResult(stream, Response.ContentType);
自从我将动作更新为这个之后,除了 Chrome 的音频播放器无法再搜索之外,它在所有方面都运行得更好。当您尝试调整您在文件中的位置时,它总是跳回到开头。
我在研究中发现的最接近的问题如下:
它在其他浏览器中运行良好,当我将不同的源放入同一播放器时,它也能正常运行。我相信我从这里发送的文件一定有问题。
上面的文章给了我一个尝试的想法。我将我的状态代码更改为 206
即使我正在发送文件的整个范围,并且修复了它。出于某种原因,状态代码 200
中断了在 chrome 的音频播放器中的搜索。