我创建了 ASP.Net httphandler 来计算 MP3 文件的访问次数。Httphandler 被用于 Web 应用程序以及 ios + android 应用程序。
它在 web + ios 应用程序中运行良好。如果我在三星 Galaxy S 中运行 android 应用程序,则它可以完美播放 MP3 文件,但在三星 Galaxy Ace 手机中无法正常工作。
我不知道我的 asp.net 代码有什么问题。下面是httphandler的代码。
public class MP3DownloadHanlder : IHttpHandler , IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
//Here I increment number of visit by filename in request
string filename = context.Request.QueryString["Title"] + ".mp3";
string path = context.Server.MapPath("audio");
string file = path + "\\" + filename;
if (System.IO.File.Exists(file))
{
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.AddHeader("content-disposition", "attachment; filename=" + filename);
context.Response.AddHeader("content-length", fs.Length.ToString());
context.Response.ContentType = "audio/mpeg";
byte[] bytes = new byte[fs.Length];
int bytesToRead = (int)fs.Length;
int bytesRead = 0;
while (bytesToRead > 0)
{
int n = fs.Read(bytes, bytesRead, bytesToRead);
if (n == 0) break;
bytesRead += n;
bytesToRead -= n;
}
bytesToRead = bytes.Length;
context.Response.OutputStream.Write(bytes, 0, bytes.Length);
}
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}