Laravel 5.7 Не удается записать данные изображения в путь Вмешательство изображения

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

Каждый раз, когда суперадмин создает новую компанию, он создает папку, которую можно найти в открытом доступе.

$path = public_path().'/attachments/'.$company_id;
if (!File::exists($path)) {
                File::makeDirectory($path, 777, true, true);
}

При попытке загрузить логотип компании выдает ошибку "Can't write image data to path (C:\wamp64\www\accubooksv2\public/attachments/10/C-CP//1550648014.jpg)"

Контроллер

$data['company_id'] = Auth::user()->company_id;
        $image = $request->file('image');
        $data['imagename'] = time().'.'.$image->getClientOriginalExtension();
        $destinationPath = public_path().'/attachments/'.$data['company_id'].'/C-CP/';
        // $path = public_path().'/attachments/'.$data['company_id'].'/C-CP/';
        // File::makeDirectory(public_path()."uploads/properties");
        // File::makeDirectory($path,0777,true);
        $img = Image::make($image);
         $img->resize(100, 100, function ($constraint) {
            $constraint->aspectRatio();
        })->save($destinationPath.'/'.$data['imagename']);

Вот пример созданной новой папки после того, как я создал новую компанию. введите здесь описание изображения

Вопрос: В чем причина этой ошибки и как ее исправить?


person Angel    schedule 20.02.2019    source источник
comment
Есть ли у Laravel необходимые разрешения для этого каталога?   -  person Markus    schedule 20.02.2019
comment
Я всегда проверяю новую созданную папку всякий раз, когда я создаю новую компанию, разрешено изменять, читать, писать, читать и выполнять (проверено)   -  person Angel    schedule 20.02.2019
comment
Я обновил свой пост, я привел пример после того, как создал новую компанию.   -  person Angel    schedule 20.02.2019


Ответы (1)


Ключ к ошибке может быть в пути к файлу:

C:\wamp64\www\accubooksv2\public/attachments/10/C-CP//1550648014.jpg)

Смешанный разделитель каталогов может вызывать ошибку. Что произойдет, если вы измените разделитель каталогов с / на \.

Если вы хотите сделать свой код кроссплатформенным, используйте DIRECTORY_SEPARATOR вместо \ или /. Например.:

$path = public_path() . DIRECTORY_SEPARATOR . 'attachments'. DIRECTORY_SEPARATOR . $company_id;

Or

$path = join(DIRECTORY_SEPARATOR, array('attachments', $company_id);
$path = public_path($path);
person Niraj Shah    schedule 20.02.2019