Файл исключения LeagueFlysystemFileExistsException уже существует в path:

#php #database #laravel #image

#php #База данных #laravel #изображение

Вопрос:

Все мои множественные данные успешно вставлены в базу данных. Однако, если я хочу вставить то же изображение, что и то, которое было вставлено ранее, появились эти ошибки LeagueFlysystemFileExistsException File already exists at path: public/complaint/walls defect 1.jpg . Предположительно, я хочу, чтобы один и тот же файл изображения можно было вставлять несколько раз. Могу ли я узнать, как я могу это исправить?

таблица жалоб

 id
defect_id
image
description
report_by
  

ComplaintController.php

 <?php

namespace AppHttpControllers;

use Auth;
use Validator;
use Response;
use CarbonCarbon;
use AppComplaint;
use IlluminateSupportFacadesStorage;
use IlluminateHttpRequest;
use InterventionImageImageManagerStatic as Image;

class ComplaintController extends Controller
{
    public function index()
    {
        return view('buyers.complaint');
    }

    public function create(Request $request)
    {
        if (count($request->defect_id) > 0) {
            foreach($request->defect_id as $item=>$v) {
                if (isset($request->image[$item])) {
                    $images = $request->file('image');
                    $image_resize = Image::make($images[$item]->getRealPath());
                    $image_resize->resize(900, 630);
                    $filename = $images[$item]->getClientOriginalName();

                    Storage::put($filename, $image_resize);
                    Storage::move($filename, 'public/complaint/' . $filename);                  
                }
                $data = array(
                    'defect_id' => $request->defect_id[$item],
                    'image' => $filename,
                    'description' => $request->description[$item],
                    'report_by' => auth()->user()->typable->buyer_id,
                    'created_at' => Carbon::now()->toDateTimeString(),
                    'updated_at' => Carbon::now()->toDateTimeString()
                );

                Complaint::insert($data);
            }
        }
        return redirect('/report-form')->with('success','Your report is submitted!');
    }

  

Ответ №1:

Это не проблема с БД, но вы пытаетесь сохранить другое изображение (из другого запроса, может быть одно и то же изображение) с тем же именем файла. Этот файл уже существует в вашем хранилище. Вам либо сначала нужно проверить, существует ли файл уже в месте хранения, и если это так, удалите его и снова переместите новый. Или то, что я обычно делаю, это добавляю случайную строку из 5 символов в конце, чтобы убедиться, что у них никогда не будет одного и того же имени файла, и я сохраняю это новое имя в БД.

 $filename = Str::random(5) . '_' . $filename;
  

Ответ №2:

Если вы хотите сохранить существующее изображение в свой каталог.

Вот мой пример кода. Я использовал случайное имя изображения перед сохранением в базе данных.

  trait UploadFileTrait
{
    /**
     * Upload file
     *
     * @param null $folder
     * @param null $disk
     * @param null $filename
     *
     * @return string
     */
    public function uploadFile($folder = null, $disk = null, $filename = null)
    {
        $image = Image::make($filename);
        $extension = $filename->extension();
        $file = Str::random(40) . '.' . $extension;
        Storage::put($folder . $file, $image->orientate()->encode($extension), 'public');
        $image->resize(350, 350, function ($constraint) {
            $constraint->aspectRatio();
            $constraint->upsize();
        })->save();

        return $file;
    }