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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Laravel

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

2回答

2881閲覧

AWS S3へのアップロードファイルの形式がcsvからtxtになってしまう事象につきまして(Laravel)

yowayowanitohei

総合スコア31

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Laravel

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2021/04/07 06:31

編集2021/04/07 23:50

現在ローカルに作成・保存していたcsvファイルをAWS S3へ保存するように修正を行っています。
バケットへファイルの保存・中身が問題ないことは確認できましたが
ファイルの形式がcsvではなくtxtファイルになってしまい、保存されたファイル名も英数字の羅列になってしまいます。
現状どこで変換が行われているのか特定できず困っております。


ファイルはこのような形式になっております。
Laravelでの設定したファイル名:upload.csv
S3に格納されたファイル名:3EU6rx4YDgWJG74f3XHRmUoEG83YSEG.txt

txt

1No,商品名、カテゴリ¥n1,バナナ,フルーツ¥n2,イチゴ,フルーツ¥n3,トマト,野菜¥n...

PHP

1//CSV出力 2 $filename="upload.csv"; 3 $csvheader = ["No", "商品名", "カテゴリ"]; 4 $cnt = 1; 5 $f = fopen($filename, "w"); 6 mb_convert_variables('SJIS', 'UTF-8', $csvheader); 7 fputcsv($f, $csvheader); 8 if ( $f ) { 9 foreach($list as $val){ 10 $line = [$cnt,$val['name'],$val['category']]; 11 mb_convert_variables('SJIS', 'UTF-8', $line); 12 fputcsv($f, $line); 13 $cnt++; 14 } 15 } 16 fclose($f); 17 Storage::disk('s3')->putFile('Storage/', $filename , 'public'); 18 unlink($filename);

ソースコードの内容を一部変えていますが、この状態でローカルに保存であれば
問題なくcsvファイルとして出力できていることを確認済みです。

試したこと
S3のアクセス拒否を解除するためブロックパブリックアクセス (バケット設定)
を全てオフにしたところファイルの中身がアップロードされているところまで確認できたのですが
この設定ではまずいということでしょうか。

すみませんが、Laravelからのファイルアップロード・S3の設定についてご協力をよろしくお願い致します。

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

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

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

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

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

Lulucom

2021/04/07 10:13

> ファイルの形式がcsvではなくtxtファイルになってしまい、 のところをもう少し詳しく書いていただくと良い気がします。ファイルの内容を見てそう判断されたということかなと思うのですが、実際にはどのような内容になっているのかなどです。
yowayowanitohei

2021/04/07 23:52

ご指摘ありがとうございます。 質問文を修正させていただきました。 ファイルの内容に関しまして、ファイル名が大小英字と数字が組み合わされた羅列になり 中身がcsvに入力されていたデータがそのまま入っている次第になります。
yowayowanitohei

2021/04/08 05:22 編集

ご回答ありがとうございます。 putFileAs('Storage/', $filename, $filename); に修正したところ治りました! 中身も問題なくcsvとなっておりました。 またご機会がございましたら、どうぞよろしくお願いします。
guest

回答2

0

ベストアンサー

putFileメソッドの代わりに、putFileAsメソッドを使ってファイル名も指定するとどうでしょうか。

参考:
https://readouble.com/laravel/8.x/ja/filesystem.html#storing-files
https://laravel.com/api/8.x/Illuminate/Filesystem/FilesystemAdapter.html#method_putFileAs

投稿2021/04/08 05:22

Lulucom

総合スコア1899

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

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

0

putFileAs('Storage/', $filename, $filename);

に修正したところ治りました
中身も問題なくcsvとなっておりました。

Lulucom様
拙い質問に対して丁寧なご回答ありがとうございました。
また機会がございましたらどうぞよろしくお願い致します。

投稿2021/04/08 05:21

編集2021/04/08 05:22
yowayowanitohei

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問