私はajaxを通してダウンロードするためのファイルを生成するスクリプトを持っています。誰もがファイルをダウンロードできるはずがないので、私はこの要求を制御する必要があります。ファイルをダウンロードして配信できないのですか?ヘッダーの問題と思われますか?
- 要求が処理され、すべてがOKであれば、一時ファイルは、ファイル名であることを最初の行で生成され
- サーバにデータをAjaxのリクエストを送信し、クリックイベントをリッスン:プロセスは次のようになりますさらに内容はダウンロードするファイルの内容です
- 新しく生成されたファイルのURLをajax関数に送り返し、非表示のiframeのsrc属性にそのエンドポイントを入力します。 エンドポイントが呼び出され
- 、コントローラメソッドをチェックファイルが存在する場合、それを開き、
array_shift
を用い$filename
変数に最初の行を置き、$content
変数へのコンテンツの残りの部分を置き、 - ためのヘッダーを設定ダウンロードして
$content
変数をエコーします。
これはどういうわけか、期待どおりに機能しません。 iframeのためではありません。ブラウザのURLにアクセスしたときに、ChromeでChromeのERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
エラーが通知されるためです。私はLaravelを使用していますが、どこに偽のヘッダーを設定したのか分かりません。
これまでにダウンロード・スクリプト:
public function download($fileId)
{
$file = $this->tempFilesPath . $fileId;
if (file_exists($file)) {
$data = explode("\n", file_get_contents($file));
//@unlink($file);
$fileName = array_shift($data);
$content = implode("\n", $data);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename=' . $fileName);
echo $content;
exit;
}
}
$fileName
と$content
の値をダンプは、期待値を示しています。
提案?ありがとう。
はい、ヘッダーとエラーがあるようです。 Haventはあなたのロジックを通過しましたが、http://stackoverflow.com/questions/386845/http-headers-for-file-downloadsを助けるためのリンクがあります。同様の点で、document.locationをリンクファイルはダウンロードされ、ダウンロードリンクにリダイレクトされません。 – georoot
返信いただきありがとうございます。コンテンツタイプをapplication/octet-streamに変更しても問題ありませんでした。 – Ben