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);
MIMEタイプはHTTPプロトコルにのみ存在し、ファイルシステムの場合、ファイル拡張子から常に推測されます。 Chromeは、FileSystem APIで作成されたファイルを同じ意味で扱います。 –
問題は、ユーザーをファイルのURLにリダイレクトするときに、私は再びHTTPの世界に入り、どのMIMEタイプをhttp応答と共に送信するかを決定するのが妥当であるということです。私は、ユーザーがブラウザでファイルを聞くことを望まない、彼らはそれを保存する必要があります。今、私は.download拡張子を追加し、irはダウンロードをトリガーしますが、ファイルは後でユーザーによって名前が変更される必要があります。これは苦痛です。ファイルを.zipでカプセル化しているかもしれませんが、ユーザーは再度使用して解凍してから使用しています。 –