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())
でログを見ると下記のような感じ。
なぜかmimeType
もapplication/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.ini
のupload_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, )),
mimeType
がapplication/octet-stream
になってたのは、多分ファイルサイズ上限の2M
に引っかかりファイルがアップロードできてなくて、存在しないファイルからmimeType
を推測しようとしてapplication/octet-stream
とかになってたんだきっと(未調査)…
laravel upload image file mime type octet
とかで検索してもバシッとくる結果が出てこなかったのは、きっとこんな初歩的なミスをする人はあんまいないということだろう…。
(´・ω・`)
(´・ω:;.:…
(´:;….::;.:. :::;.. …..