🤖
[deploy] nuxt/laravel 画像・音声をs3へアップロード
s3へのアップロードで、以下エラーが発生
The file \"test1.mp3\" does not exist
わかってること
- src/storage/app/public/images配下には保存できている
- サイズの問題ではない?
該当コード
src/app/Http/Controllers/MusicFileController.php
- サイズの問題ではない?
public function musicFileUpload(Request $request)
{
$music_file = new MusicFile;
// リクエストされてきたmusic_fileにファイル名をつけて保存
// 元々ついていたファイル名を保存するファイル名に設定
$file_name = $request->file('music_file')->getClientOriginalName();
// public/mp3files配下に保存
// $include_public = Storage::putFileAs('public/mp3files', $request->file('music_file'), $file_name);
// public/部分をカット
// $music_file->music_file = str_replace('public/', '', $include_public);
$music_file->music_file = Storage::disk('s3')->putFile('/', $file_name, 'public');
// リクエストされてきたcover_imagにファイル名をつけて保存
// 元々ついていたファイル名を保存するファイル名に設定
$file_name = $request->file('cover_image')->getClientOriginalName();
// public/images配下に保存
// $include_public = Storage::putFileAs('public/images', $request->file('cover_image'), $file_name);
// public/部分をカット
// $music_file->cover_image = str_replace('public/', '', $include_public);
$music_file->cover_image = Storage::disk('s3')->putFile('/', $file_name, 'public');
$music_file->title = $request->title;
$music_file->genre = $request->genre;
$music_file->emotions = $request->emotions;
$music_file->user_id = $request->user_id;
$music_file->user_name = $request->user_name;
$music_file->save();
}
やったこと
10/15
upload_max_filesize、post_max_sizeを200Mにする
docker/php/php.ini
zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 200M //64→200にあげる
post_max_size = 200M //128→200にあげる
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /dev/stderr
default_charset = UTF-8
[Date]
date.timezone = Asia/Tokyo
[mysqlnd]
mysqlnd.collect_memory_statistics = on
[Assertion]
zend.assertions = 1
[mbstring]
mbstring.language = Japanese
キャッシュクリア
# php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Application cache cleared!
# Configuration cache cleared!
# Route cache cleared!
# Compiled views cleared!
10/16
client_max_body_sizeを200Mにする
docker/web/default.conf
server {
listen 80;
root /var/www/html/src/public;
index index.php index.html index.htm;
index index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# add_header Access-Control-Allow-Origin *;
# add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
# add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
# add_header Access-Control-Allow-Headers "X-Requested-With, Origin, X-Csrftoken, Content-Type, Accept";
# add_header Access-Control-Allow-Credentials true;
client_max_body_size 200M; //20→200にあげる
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
キャッシュクリア
dockerコンテナ上げ下げ
docker system prune
docker-compose build --no-cache
docker-compose up
s3に直接アップロードしたところ問題なくアップロードできた
laravelもしくはサーバー側の問題ではありそう
呼び出されているFile.phpのline36を確認
src/vendor/symfony/http-foundation/File/File.php
public function __construct(string $path, bool $checkPath = true)
{
if ($checkPath && !is_file($path)) {
throw new FileNotFoundException($path); //line36
}
parent::__construct($path);
}
いったんアップロードはできた
MusicFileController.php変更をしたところ
src/app/Http/Controllers/MusicFileController.php
public function musicFileUpload(Request $request)
{
$music_file = new MusicFile;
// リクエストされてきたmusic_fileにファイル名をつけて保存
// 元々ついていたファイル名を保存するファイル名に設定
$file_name = $request->file('music_file')->getClientOriginalName();
// public/mp3files配下に保存
// $include_public = Storage::putFileAs('public/mp3files', $request->file('music_file'), $file_name);
// public/部分をカット
// $music_file->music_file = str_replace('public/', '', $include_public);
$music_file->music_file = Storage::disk('s3')->putFile('/', $request->file('music_file'), 'public');
// リクエストされてきたcover_imagにファイル名をつけて保存
// 元々ついていたファイル名を保存するファイル名に設定
$file_name = $request->file('cover_image')->getClientOriginalName();
// public/images配下に保存
// $include_public = Storage::putFileAs('public/images', $request->file('cover_image'), $file_name);
// public/部分をカット
// $music_file->cover_image = str_replace('public/', '', $include_public);
$music_file->cover_image = Storage::disk('s3')->putFile('/', $request->file('music_file'), 'public');
$music_file->title = $request->title;
$music_file->genre = $request->genre;
$music_file->emotions = $request->emotions;
$music_file->user_id = $request->user_id;
$music_file->user_name = $request->user_name;
$music_file->save();
}
エラーがいかに変わった
Error executing "PutObject" on "https...
解決
下記記事の方法でs3の設定を変えたらいけた
Discussion