2012-03-26 5 views
0

Google Chromeの拡張機能を開発しています。これは、mp3ファイルを生成し、FileSystem APIを使用してlocalstorageに保存します。私が保存するとき、私はMIMEタイプ "application/octec-stream"を指定します。後で私はファイルをダウンロードするのではなく、ファイルurlをユーザーに送り、ブラウザはhtml5プレーヤーでそれを再生します。応答を見ると、返されたMIMEタイプはファイルの拡張子に基づいて "audio/mp3"であることが明らかです。 質問は次のとおりです。ブラウザでファイルを再生するのではなく、効率的にダウンロードするにはどうすればいいですか?ここに私がjavascriptでやっているものの小さなスニペットがあります。Google ChromeのFileSystem ApiのMimeタイプ

fs.root.getFile(contextData.songInfo.Name + ".mp3", { create: true }, function (fileEntry) { 

     // Create a FileWriter object for our FileEntry (log.txt). 
     fileEntry.createWriter(function (fileWriter) { 

      fileWriter.onwriteend = function (e) { 
       console.log('Write completed.'); 
      }; 

      fileWriter.onerror = function (e) { 
       console.log('Write failed: ' + e.toString()); 
      }; 

      var bb = new window.WebKitBlobBuilder(); 
      bb.append(buffer); 
      fileWriter.write(bb.getBlob('application/octet-stream')); 

      contextData.fileUrl = fileEntry.toURL(); 

      callback(contextData); 

     }, errorHandler); 



    }, errorHandler); 
+0

MIMEタイプはHTTPプロトコルにのみ存在し、ファイルシステムの場合、ファイル拡張子から常に推測されます。 Chromeは、FileSystem APIで作成されたファイルを同じ意味で扱います。 –

+0

問題は、ユーザーをファイルのURLにリダイレクトするときに、私は再びHTTPの世界に入り、どのMIMEタイプをhttp応答と共に送信するかを決定するのが妥当であるということです。私は、ユーザーがブラウザでファイルを聞くことを望まない、彼らはそれを保存する必要があります。今、私は.download拡張子を追加し、irはダウンロードをトリガーしますが、ファイルは後でユーザーによって名前が変更される必要があります。これは苦痛です。ファイルを.zipでカプセル化しているかもしれませんが、ユーザーは再度使用して解凍してから使用しています。 –

答えて

3

ここではより詳細な説明があります。これは、リソースをダウンロードするには、ブラウザを強制するのではなく、それにナビゲートします:) a[download]属性を使用して、filesystem: URL

<a href="filesystem:..." download="FileName">Download it!</a> 

hrefを設定します。http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

+0

よく覚えています! –