2009-08-28 5 views
4

私は、本質的に1つのサーバーから別のサーバーにファイルを "プロキシ"している次のコードを持っています。それはIEで完全に動作しますが、FirefoxはContent-Typeヘッダーを無視して、常にファイル(MP3)をtext/htmlとして送信します。FirefoxはResponse.ContentTypeを無視します

これは大きな問題ではありませんが、すべてのブラウザで正しく機能するようにしたいので、誰でも手伝っていただけますか?また、これを達成するためのより良い/より効率的な方法がある場合は、投稿してください!

FileInfo audioFileInfo = new FileInfo(audioFile); 
HttpWebRequest downloadRequest = (HttpWebRequest) WebRequest.Create(audioFile); 
byte[] fileBytes; 

using (HttpWebResponse remoteResponse = (HttpWebResponse) downloadRequest.GetResponse()) 
{ 
    using (BufferedStream responseStream = new BufferedStream(remoteResponse.GetResponseStream())) 
    { 
    fileBytes = new byte[remoteResponse.ContentLength]; 
    responseStream.Read(fileBytes, 0, fileBytes.Length); 

    Response.ClearContent(); 
    // firefox seems to ignore this... 
    Response.ContentType = Utilities.GetContentType(audioFileInfo); 
    // ... and this 
    //Response.ContentType = remoteResponse.ContentType; 
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", audioFileInfo.Name)); 
    Response.AddHeader("Content-Length", remoteResponse.ContentLength.ToString()); 
    Response.BinaryWrite(fileBytes); 
    Response.End(); 
    } 
} 
+1

"IEでは完全に機能します。" IEはコンテンツの最初のxバイトからコンテンツタイプを推測しようとします。おそらく間違ったタイプ(または何もありません)を送信している可能性があります。 –

+0

remoteResponse.ContentTypeとUtilities.GetContentType(audioFileInfo)の両方が "audio/mpeg"を返します。これはMP3に適しています。 –

答えて

6

してみてください。

+0

Utilities.GetContentType(audioFileInfo)が何を返しているのかわかりませんが、Lorisの提案はうまくいくはずです。 Response.ContentType = "application/octet-stream"; –

-1

私はわからないが、おそらく、ヘッダーをクリアしてMIMEタイプを追加すると、このため

Response.ClearHeaders(); 
Response.AddHeader("MIME Type",Utilities.GetContentType(audioFileInfo)); 
+0

-1、 "MIMEタイプ"はw3c標準のhttpヘッダーではありません。 –

0

典型的なタイプは、オーディオ/ mp3で助けることができます。あなたは何の問題を見ていますか?

MP3ファイルのQuicktimeハイジャックに関するリンクhereもあります。

Response.ClearHeaders(); 
Response.ClearContent(); 
Response.ContentType = "application/octet-stream"; 
Response.AddHeader("Content-Disposition", "attachment; filename=\"blah\""); 
... 

私の作品、私はクライアントにダウンロード可能なファイル(必ずしもMP3ファイル)を送信する必要があります:x2は述べたようにClearContents()を呼び出し、application/octet-streamとしてファイルを送信する前にResponse.ClearHeaders()を追加

3

私が最初に踏んだのは、Live HTTP Headers firefoxプラグイン、またはfiddlerのようなものを使ってヘッダーをチェックアウトすることです。

0

Response.ClearContent()の代わりにResponse.Clear()を使用すると同じ結果になりますか?

関連する問題