Файл "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 ▶}
  ]
]
Author: Ale Ardanaz, 2019-06-05

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. Чтобы создать ссылку символично, вы можете использовать команду Artisan storage: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();
    }
}
 2
Author: porloscerros Ψ, 2019-06-06 06:57:49