Файл "llllllllllllasas.jpg" was not uploaded due to an unknown ошибка. Laravel ошибка
я хочу загрузить много фотографий в таблицу изображений в БД. когда я просматриваю массив фотографий и пытаюсь сохранить их, он сохраняет только первый, а во втором он бросает мне следующую ошибку.
The file "llllllllllllasas.jpg" was not uploaded due to an unknown error.
Controller
if ($request->hasFile('img')) {
foreach ($request->file('img') as $image) {
$img = new Imagen;
$img->perro_id = $perro->id;
$destinationPath = 'perrosimg/';
$filename = $image->getClientOriginalName();
$img->ruta = $filename;
$img->save();
$image->move( $destinationPath, $filename);
}}
как я уже говорил, первый перемещается в соответствующую папку и сохраняется в базе данных, но второй пропускает ошибку. Ошибка в методе move (), но я не понимаю, почему. Заранее спасибо.
dd($request->all());
array:10 [▼
"name" => "Alejo"
"tamaño" => "asas"
"edad" => "21"
"raza" => "oiuuhihgih"
"contacto" => "5´ñl´lñ"
"comentarios" => "31324123"
"button" => null
"_token" => "TMa2POZWfH5Cl3hBs6ZeAS77WyM8Z2Jm5hx4xfXn"
"imagenes_perro" => null
"img" => array:3 [▼
0 => UploadedFile {#1110 ▶}
1 => UploadedFile {#1111 ▶}
2 => UploadedFile {#1112 ▶}
]
]
1 answers
Чтобы сделать это с помощью move()
, Вы можете использовать метод base_path()
, который возвращает полный путь к корню проекта, или если вы хотите вернуть общедоступный каталог, вы можете использовать public_path()
.
$destinationPath = 'perrosimg';
$image->move(public_path($destinationPath), $filename);
Хотя использование move
работает и широко используется, в документации говорится:
Метод
move()
можно использовать для переименования или перемещения существующего файла в новое место.
И для загрузки файлов, они рекомендуют использовать store()
или put()
:
Laravel позволяет очень легко хранить загруженные файлы с помощью метода
store()
над экземпляром загруженного файла. Вызовите методstore
С путем, по которому вы хотите сохранить загруженный файл.
Итак, для вашего случая вы можете попробовать следующее:
$filename = $image->getClientOriginalName();
$destinationPath = 'perrosimg';
$image->storeAs($destinationPath, $filename, 'public');
Передавая ему в качестве параметров сначала папку, второе имя и третий диск.
Глаз, чтобы отметить:
Диск публичный предназначен для файлов, которые будут доступны общественный. По умолчанию общедоступный диск использует локальный драйвер и сохраняет эти файлы в
storage/app/public
. Чтобы сделать их доступными из интернета, вы должны создать символическую ссылку отpublic/storage
доstorage/app/public
. Чтобы создать ссылку символично, вы можете использовать команду Artisanstorage:link
:
php artisan storage:link
После сохранения файла и создания ссылки символично, вы можете создать URL для файлы с помощью мастера
asset
:
<img src="{{ asset('storage/file.jpg') }}"/>;
В общем, вы можете использовать move()
, если он служит вам, в конце концов, он перемещает файл из временного местоположения, которое дает ему PHP. Или также попробовать с storeAs()
, он идет на вас.
В вашем коде:
if ($request->hasFile('img')) {
foreach ($request->file('img') as $image) {
$destinationPath = 'perrosimg';
$filename = $image->getClientOriginalName();
$img = new Imagen;
$img->perro_id = $perro->id;
$img->ruta = $destinationPath.'/'.$filename;
$img->save();
$image->move(public_path($destinationPath), $filename);
}
}
Или
if ($request->hasFile('img')) {
foreach ($request->file('img') as $image) {
$destinationPath = 'perrosimg';
$filename = $image->getClientOriginalName();
$img = new Imagen;
$img->perro_id = $perro->id;
$img->ruta = $image->storeAs($destinationPath, $filename, 'public');
$img->save();
}
}