2012-05-09 9 views
3

MP3ファイルを指すページにアンカーリンクがあります。 Right-click + Save Target As..でこのファイルをダウンロードできるようにするには、リンクをクリックしてください。htmlアンカーリンクでオーディオファイルをダウンロードするブラウザの操作とは独立してクリック

現在、さまざまなブラウザの動作が異なるという問題に直面しています。 IEはWMPでファイルを再生し、Firefoxはダウンロードボックスを表示し、Chromeはファイルのインライン再生を開始します。ワンクリックで期待される動作は、ブラウザがファイルをダウンロードするか、ダウンロードダイアログを表示することです。

は、私は、次の試してみました:ページ上の隠しiframeを作成し、それが私のアンカーリンクのターゲットとしてある与え

  • 、またこのiframe内部その作用としての私の好みのMP3ファイルの場所でフォームを作成してみましたそしてwindow.open
の複数の組み合わせを試してみました
  • リンククリックで window.location = MP3 URLを設定
  • アンカーリンクのクリックイベントにフォームを送信210

    これらのどれも私を助けてくれませんでした。私はちょうどリンクをクリックしてダウンロードダイアログを得ることができません。ただ、正しい答えの始まりを投稿する

    <a id="someID" href="myMP3file" target="whatever" title="Download" class="someClass">Download Me!</a> 
    
  • +0

    この質問は役に立ちそうです。http://stackoverflow.com/questions/4210406/simple-html-anchor-question –

    +0

    @CrabBucket - ありがとう!私はこのポストの提案された解決策が私を助けることができるかどうかチェックしようとします。しかし、私はファイルを提供するサーバーにアクセスできないと思います! – weber

    +0

    もし私が間違っていないのであれば、あなただけが要求するのは、HTMLだけでは不可能です。あなたのサーバー上にいくつかのサーバー側言語サポートがありますか? (PHPなど)Apacheサーバーを使用していますか?もしそうなら、 '.htaccess'ファイルを作成できますか?私が尋ねていることは、あなたにちょこちょこしている場合、私に知らせてください:) – iMoses

    答えて

    1

    @CrabBucket - ここで問題を解決しました。 私にとって素晴らしい作品:) 私はこのサーバー側からこのダウンロードを開始するためにコントローラアクションを使用していました(これが私がハンドラを使用しなかった理由です)。コントローラからのHTTPレスポンスを返すと、最初は難しいように見えたが、その後、私は事をカンニングする方法を考え出し;) 私は私のコントローラのアクション内の次のコードを書かなければならなかった -

    { 
        HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(FileURL); 
        HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); 
    
        Stream myStream = myResponse.GetResponseStream(); 
    
        Response.ContentType = "application/octet-stream"; 
        Response.AddHeader("Content-Disposition", "attachment; filename=\"SaveMe.MP3\""); 
    
        var readBytes = 10000000; 
        var myAudResponse = new byte[readBytes]; 
        int fileLength; 
        do { 
         fileLength = myStream.Read(myAudResponse, 0, (int)readBytes); 
         Response.OutputStream.Write(myAudResponse, 0, fileLength); 
         Response.Flush(); 
        } while (fileLength > 0); 
        myStream.Close(); 
    
        return new EmptyResult(); 
    } 
    

    基本のtry-catchを使用して、あなたの知恵の通りなど:) さまざまなウェブフォーラムやCrabBucket(コードを投稿した場所からのSOの質問)に感謝しています。


    複数の編集が必要です。私のコードはしばらく失敗しました。私は、ループは常に行く方法だと思います!

    1

    無実のアンカーリンクは次のようになります。私はhttpハンドラ(.ashx)ファイルを使用して、これらのファイルのカスタム処理をコード化すると思います。このtutorialは例を示しています。

    あなたのリンクは、ハンドラがストリーミング作業を行うだろう

    <a href="MyMp3Handler.ashx?fileName=MyFile">Click here to download</a> 
    

    ようなものになるだろう。 (この SO questionに基づいて)ハンドラがどのように見えるかの

    例は

    public void ProcessRequest (HttpContext context) { 
    
        var filePath = Server.MapPath(context.Request.QueryString["fileName"].ToString()) + ".mp3";   
        if (!File.Exists(filePath))    
         return;   
    
        var fileInfo = new System.IO.FileInfo(filePath);   
        Response.ContentType = "application/octet-stream";   
        Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", filePath));   
        Response.AddHeader("Content-Length", fileInfo.Length.ToString());   
        Response.WriteFile(filePath);   
        Response.End(); 
    } 
    

    ハンドラはまた、web.configファイルに登録する必要があります。

    メモ:これは私の頭の上にはありませんので、コードを調整する必要があります。ちょうど私が

    同僚だけでも、application/octet-streamに設定されているコンテンツタイプと、それはそれは取得する方法のブラウザの実装までのままであることを指摘している私は

    を始めるだろうか追加の注記に​​ポップしようと思いましたレンダリングされるので、まだストリームされません。それは私が似たようなことをしたと言いましたが、PHPではmp3ファイルがFirefox、IE、Chromeでストリーミングされ、原則的に機能します。あなたの質問にタグが付けられているので、私はasp.netの例を提供しました。

    +0

    ありがとうございました!私は私のケースではハンドラと一緒に行くことができないと思うが、私は似たような解決策を取り組んでいる。私の答えがあったときに、あなたにもう一度戻ってきます。 はい、私はASP.NETを使用しています:) – weber

    関連する問題