質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

Q&A

解決済

3回答

1618閲覧

【Laravel5.5】Windowsのみダウンロードファイルに拡張子が表示しない

mumuctas2241

総合スコア6

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

0グッド

0クリップ

投稿2020/01/20 07:00

前提・実現したいこと

Laravel5.5を使用し、業務管理システムを作成しております。
その中でCSVファイルのテンプレートファイルをダウンロードする機能がありますが、
Windowsのみファイルに拡張子が表示されない問題が発生しております。
Chrome側の設定やwin側の設定を疑いましたが、
改善されないためプログラムに問題があるのではないかという結果に至り質問させていただきます。
win側もダウンロードしたファイルに初めから拡張子を表示させる方法などございましたらご教授いただけると幸いでございます。

発生している問題・エラーメッセージ

「file.csv」MacのChromeではこのように出力されるが、
「file」WindowsのChromeではダウンロードファイルに拡張子が表示されません。

イメージ説明

該当のソースコード

Controllersとresourcesの情報です。

PHP

1public function file(){ 2 # CSV出力 3 $response = [ 4 'Content-type' => 'text/csv', 5 'Cache-Control' => 'must-revalidate, no-cache', 6 'Expires' => '0', 7 ]; 8 $callback = function(){ 9 $headers = [ 10 '処理 削除:1 その他:空白', 11 '種別ID', 12 'コード', 13 '名称', 14 ]; 15 16 $config = new ExporterConfig(); 17 $config 18 ->setDelimiter(',') // 区切り文字 19 ->setEnclosure('"') // 囲み文字 20 ->setEscape('\') // エスケープ文字 21 ->setToCharset('SJIS-win') // 出力ファイルの文字コード 22 ->setFromCharset('UTF-8') // 読み込み元の文字コード 23 ->setColumnHeaders($headers); // CSVの1列目のヘッダー行 24 $exporter = new Exporter($config); 25 $exporter->export('php://output', []); 26 }; 27 28 return response()->stream($callback, 200, $response); 29 }

PHP

1 <form method="POST" action="{{ url("/naire-admin/import/consts/save") }}" enctype="multipart/form-data"> 2 <table class="data-search w700"> 3 <tr> 4 <th class="w25p">CSVファイル</th> 5 <td > 6 @php $form_name="upload_file" @endphp 7 <input type="file" name="{{$form_name}}" class="w95p"> 8 </td> 9 </tr> 10 </table> 11 <div class="w700 tcenter mt20 mb20"> 12 {{ csrf_field() }} 13 <button type="submit" class="w100">アップロード</button> 14 <a href="{{ url("/naire-admin/import/consts/file") }}"> 15 <button type="button" class="w125">CSVフォーマット(この部分です)</button> 16 </a> 17 </div> 18 </form>

試したこと

初歩的なことになりますがwindows側の設定(拡張子の表示がOFFになっているか)
ファイルに「.csv」を付与させて、excelなどで確認し出力ファイルに問題ないか確認済みです

不足しているソースなどございましたらアップします。
どうぞよろしくお願いします。

補足情報(FW/ツールのバージョンなど)

■検証、テスト用ハードウェア(検証端末)
開発環境:MAMP
PHP:7.2.7
Laravel5.5
OS:MacOS10.14.6(Mojave)
ブラウザ:Chrome79.0.3945.117

確認画面
OS:Windows10
ブラウザ:Chrome79.0.3945.117

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/01/20 07:04

>出力ファイルに問題ないか 結果、問題あったのかなかったのか分かりませんので、具体的に記載願います。 たぶん拡張子付与しなくてもテキストエディタで開くことはできると思います。拡張子付与しない状態で開かれた方が実際に近いものとなります。
退会済みユーザー

退会済みユーザー

2020/01/20 07:14

PHP/Laravel側からのHTTPレスポンスヘッダーをチェックするのが先。ChromeならデベロッパーツールのNetworkタブで。
mumuctas2241

2020/01/20 09:14

ありがとうございます。無事解決できました。 出力ファイルに問題ないかとは、ダウンロードした拡張子のついていないファイルに拡張子を手動でつけて開くことができるかのチェックです。なお付与しなくても開くことも可能でした
guest

回答3

0

「Windowsでは拡張子がない」ではなく「Macではファイル内容から推測されて拡張子が追加されている」が真相なのでは。

file/naire-admin/import/consts/fileから使われてるだけなのでファイル名の指定がない。

  • ファイルをダウンロードさせる時にはファイル名を指定する。
  • Content-Disposition レスポンスヘッダーを使えば指定できる。

Laravelとは関係なくこれを覚えておく。

投稿2020/01/20 07:59

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mumuctas2241

2020/01/20 09:27

ありがとうございます。 Content-Dispositionを追加し解決できました。 また機会がございましたら、どうぞよろしくお願い申し上げます。
guest

0

ベストアンサー

「Content-Disposition: attachment; filename="~"」
っていうレスポンスヘッダーがあれば、それを初期ファイル名に採用すると思うのですが、
見たところそういう配慮がないように見えます。

Laravelの事例ではないのですが、
ダウンロード用の処理で必要なヘッダーに関しての考察が深いので、
一見の価値ありだと思います:
【PHP】正しいダウンロード処理の書き方 - Qiita

投稿2020/01/20 07:04

編集2020/01/20 07:12
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mumuctas2241

2020/01/20 09:20

ご回答ありがとうございます。解決できました。 先にご回答されていらっしゃいましたのでベストアンサーにさせていただきます。 また何かございましたらよろしくお願い申し上げます。 - - - $responseに下記を記載し対策しました。 'Content-Disposition' =>'attachment; filename=file.csv',
guest

0

調べたら以下のような記事を見つけました
現象としては似ているかなと思います

XOOPS Cube日本サイト - フォーラム d3downloads でダウンロードすると拡張子が消える

記事内ではどこかの処理で拡張子を切り取る処理が書かれているのが原因みたいですがどうでしょうか

投稿2020/01/20 07:10

sola-msr

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mumuctas2241

2020/01/20 09:25

ありがとうございます。じっくり読まさせていただきました。 他のファイルも確認しましたが、拡張子の切り取り処理はございませんでした。 また何かございましたらよろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問