MP3 ファイルのアクセス数をカウントする ASP.Net httphandler を作成しました。Httphandler は、Web アプリケーションだけでなく、ios + android アプリケーションでも使用されています。
Web + ios アプリケーションで正常に動作しています。Samsung Galaxy S で Android アプリケーションを実行すると、MP3 ファイルは完全に再生されますが、Samsung 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;
}
}
}