何かメモリたいブログ

何かメモリたい

Laravel5.5 + PHP7.0 でEC2上のアプリからS3に画像をアップロードしようとしてえらいハマった

解決策

/etc/php.ini内のupload_max_filesizeを変更する。

変更前

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

変更後

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M

問題点

Laradockでの開発環境を整えて、ローカルだとS3への画像アップロード成功するのに、EC2上だと何故かアップロードできずかなりハマった。

if ($request->hasFile('image-file')) {
// ローカルだとこっちへ来る
$path = Storage::putFile('images', $request->file('image-file'), 'public');
// $url =Storage::url($path);
} else {
// EC2上だとこちらへ来る
Log::info("no images");
}

Log::info($request->all())でログを見ると下記のような感じ。 なぜかmimeTypeapplication/octet-streamになってしまっている…。

Laradock

  'image-file' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'image.JPG',
     'mimeType' => 'image/jpeg',
     'size' => 2577303,
     'error' => 0,
     'hashName' => NULL,
  )),

EC2

  'image-file' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'image.JPG',
     'mimeType' => 'application/octet-stream',
     'size' => 0,
     'error' => 1,
     'hashName' => NULL,
  )),

EC2上でパーミッション変更したり、Form::file'accept'=>'image/*'を追加したり、JPGという拡張子がおかしいのかと思い/etc/mime.typesを確認してみたりしたけど、結局/etc/php.iniupload_max_filesize = 2Mが原因だったみたい…。 なんでローカルだと成功してたかは{laradock}/php-fpm/laravel.ini内のupload_max_filesize = 20Mが適用されてたからっぽい。

/etc/php.ini変更後はmimeTypeも正しいものになった。

  'image-file' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'image.JPG',
     'mimeType' => 'image/jpeg',
     'size' => 2105078,
     'error' => 0,
     'hashName' => NULL,
  )),

mimeTypeapplication/octet-streamになってたのは、多分ファイルサイズ上限の2Mに引っかかりファイルがアップロードできてなくて、存在しないファイルからmimeTypeを推測しようとしてapplication/octet-streamとかになってたんだきっと(未調査)…



laravel upload image file mime type octet とかで検索してもバシッとくる結果が出てこなかったのは、きっとこんな初歩的なミスをする人はあんまいないということだろう…。






(´・ω・`)

(´・ω:;.:…

(´:;….::;.:. :::;.. …..