更新失敗していたようで、失礼しました。再度記載し直します。
cakePHP 2.xで開発中です。
アップロードしたファイルをダウンロードする機能があり、Safariでダウンロードすると、ファイル名最後に[.html]が追加されてしまいます。
例えば、アップロードしたMS Wordファイル「xxx.docx」をダウンロードすると
「xxx.docx.html」 となります。
ファイル名から[.html]を削除するとMS Wordファイルとして開くことができます。
Chromeでは、正常に「xxx.docx」がダウンロードできます。
前提・実現したいこと
SafariでもChromeと同様にファイルをダウンロードできないでしょうか?
ご教唆ください。
以下、現状のソースです。
cakePHP
1$file_path = [サーバ上のディレクトリ/ファイル名]; 2$file_name = 'ほげほげ.docx'; 3 4//ダウンロード処理 5$headers = [ 6 'Content-Type: application/octet-stream', 7 'Content-Disposition: attachment; filename="'.$file_name.'"', 8 'Content-Length' => filesize($file_path) 9]; 10$this->response->header($headers); 11$this->response->file($file_path, array('download' => true)); 12 // $file_pathのファイル名をダウンロードファイル名にしてダウンロード 13 $this->response->download($file_name);
以下、やってみたこと
cakePHP
1$file_path = [サーバ上のディレクトリ/ファイル名]; 2$file_name = 'ほげほげ.docx'; 3 $this->response->header('Content-Type: application/octet-stream'); 4 $content = 'attachment;'; 5 $content .= 'filename='.$file_name; 6 $content .= ' filename*=UTF-8\'\''.rawurlencode($file_name); 7 $this->response->header('Content-Disposition:', $content); 8 $this->response->file($file_path); 9 // $file_pathのファイル名をダウンロードファイル名にしてダウンロード 10 $this->response->download($file_name);
補足情報(FW/ツールのバージョンなど)
Mac OS Mojave バージョン 10.14.6
Safari バージョン13.0.3
Vagrant + CentOS6.x
cakePHP2.x
追記 PHPでやってみました
PHP
1<?php 2$file_path = [サーバ上のディレクトリ/ファイル名];; 3$file_name = 'ほげほげ.docx'; 4 5// HTTPヘッダ設定 6header('Content-Type: application/octet-stream'); 7header('Content-Length: '. filesize($file_path)); 8//header('Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($file_path)); 9//ダウンロードの指示・ダウンロード時のファイル名を指定 10header('Content-Disposition: attachment; filename="'.$file_name.'"'); 11 12// ファイル出力 13readfile($file_name); 14?>
ファイル「ほげほげ.docx」がダウンロードされ、 MS Wordで開くことができました。