web-dev-qa-db-ja.com

モバイル用のHTTPヘッダー「Content-Type:application / force-download」のユーティリティ?

現在、リンクにアクセスしてモバイルデバイスからメディアコンテンツ(ビデオ、オーディオ、写真など)をダウンロードできるPHPスクリプトを作成しています。 http://www.my-web-site.com/download.php?id=7ejs8ap )最近のモバイル(Samsung)でテストしているとき、私のスクリプトは非常にうまく機能しましたGalaxy S、iPhone 4S、他のいくつか...)が、古いモバイルのSamsung C3050でエラーが発生しました。ダウンロードしたいメディアは、通常簡単にダウンロードできるオーディオmp3ファイルでした。

エラーは「不明なコンテンツタイプ」のようです。したがって、HTTPヘッダーのContent-Typeは「application/force-download」のみであったため、これをコメントして再試行します。その後、動作します。しかし、現在、私はこのContent-Typeの意味と、他のモバイルに必須となるかどうかを尋ねています。 iPhone 4でContent-Typeを使用せずにテストしたところ、動作しますが、すべてのモバイルでこの互換性があるかどうかはわかりません。

誰かがそのContent-Typeがどのように機能するのか、これが標準のMIMEではない理由、またはこれがすべてのダウンロードのためのオプションのContent-Typeであることを確認するのに役立つすべてのファイル、ブラウザ、またはデバイスダウンロード中ですか?

みんな、ありがとう。

ここに私のPHPヘッダーが送信されました:

<?php
//Assume that $filename and $filePath are correclty set.
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$filename.'"');
// header('Content-Type: application/force-download'); Non-standard MIME-Type, incompatible with Samsung C3050 for example. Let it commented
readfile($filePath);
?>

編集:Sony Xperiaで試したところ、ダウンロードは成功しませんでした。ダウンロードしたいファイルの「htmlエンコード」バイトしか表示されません。 application/octet-streamまたはapplication/force-downloadが機能しない場合、どのコンテンツタイプを使用する必要があるかを知るにはどうすればよいですか?

38
niconoe

Content-Type: application/force-downloadは、「私、Webサーバーは、このファイルが何であるかについてあなた(ブラウザ)に嘘をつき、PDF/Word文書/ MP3 /その他として扱い、神秘的なファイルを保存するようユーザーに促すことを意味します。代わりにディスクへのファイル」。これは、クライアントが「ディスクに保存」しなかった場合に恐ろしく壊れる汚いハックです。

使用しているメディアに適したMIMEタイプを使用します(例:audio/mpeg for mp3)。

使用 Content-Disposition: attachment; etc etcヘッダーは、デフォルトの動作に従うのではなく、クライアントにダウンロードを促す場合に使用します。

113
Quentin

ファイルをダウンロードするには、次のコードを使用してください... $ file変数に場所を指定してファイル名を保存します。すべてのMIMEタイプをサポートします

$file = "location of file to download"
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);

Mimeタイプについて知るには、このリンクを参照してください: http://php.net/manual/en/function.mime-content-type.php

13
Suresh kumar

application/force-downloadは標準のMIMEタイプではありません。かなり最近追加された一部のブラウザーでサポートされているハックです。

あなたの質問は本当に意味をなさない。 Internet Explorer 4が最新のCSS 3機能をサポートしない理由を尋ねるようなものです。

4
Jon Grant