Сохранение изображения вмешательства в папку владельцев в Laravel 5

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

/public/company_img/<filename>.jpg

Если имя компании пользователя - Foo, я хочу, чтобы при сохранении сохранялось загруженное изображение:

/public/company_img/foo/<filename>.jpg

Это в моем контроллере:

$image = Input::file('company_logo');
$filename = $image->getClientOriginalName();
$path = public_path('company_img/' . Auth::user()->company_name . '/' . $filename);

// I am saying to create the dir if it's not there.
File::exists($path) or File::makeDirectory($path); // this seems to be the issue

// saving the file
Image::make($image->getRealPath())->resize('280', '200')->save($path);

Просто глядя на это, вы можете легко увидеть, что он делает. Мои журналы ничего не показывают, и браузер становится пустым после того, как я нажимаю кнопку обновления. Любые идеи


person Sylar    schedule 09.04.2015    source источник
comment
Имеет ли пользователь, выполняющий PHP (т.е. веб-сервер), права, необходимые для создания файлов и папок в этом месте?   -  person Joe    schedule 09.04.2015
comment
@ Джо, да. Я получаю только пустой браузер. Нет логов, нет ошибок.   -  person Sylar    schedule 09.04.2015
comment
допустим ли File::exists($path) or File::makeDirectory($path); синтаксис PHP? Я никогда не видел оператора IF, написанного в таком формате.   -  person Joe    schedule 09.04.2015
comment
не могли бы вы опубликовать свою полную функцию контроллера? пустые страницы могут быть просто вызваны тем, что ваш контроллер ничего не выводит и не возвращает   -  person shock_gone_wild    schedule 09.04.2015
comment
@shock_gone_wild См. здесь: http://laravel.io/bin/xKY8P   -  person Sylar    schedule 09.04.2015
comment
странно, что вы получаете полную белую страницу.... если вы делаете dd (тест) в начале вашей функции обновления, то она отображается?   -  person shock_gone_wild    schedule 09.04.2015
comment
@shock_gone_wild Да, я получаю эту функцию, когда dd('here');   -  person Sylar    schedule 09.04.2015
comment
другой причиной пустого экрана может быть то, что ваш каталог storage/logs не доступен для записи вашим приложением. Вы проверили свой apache error_log (в дополнение к журналам laravel).   -  person shock_gone_wild    schedule 09.04.2015
comment
@shock_gone_wild Я новичок в laravel, поэтому я не смотрел журнал ошибок apache.   -  person Sylar    schedule 09.04.2015


Ответы (1)


File::exists($path) or File::makeDirectory($path);

Эта строка не имеет смысла, так как вы проверяете, существует ли файл, и если нет, вы хотите попытаться создать папку (в вашей переменной $path вы сохранили путь к файлу, а не к каталогу)

Я бы сделал что-то вроде этого:

        // directory name relative to public_path()
    $dir = public_path("company_img/username"); // set your own directory name there

    $filename = "test.jpg"; // get your own filename here

    $path = $dir."/".$filename;

    // check if $folder is a directory
    if( ! \File::isDirectory($dir) ) {

        // Params:
        // $dir = name of new directory
        //
        // 493 = $mode of mkdir() function that is used file File::makeDirectory (493 is used by default in \File::makeDirectory
        //
        // true -> this says, that folders are created recursively here! Example:
        // you want to create a directory in company_img/username and the folder company_img does not
        // exist. This function will fail without setting the 3rd param to true
        // http://php.net/mkdir  is used by this function

        \File::makeDirectory($dir, 493, true);
    }


    // now save your image to your $path

Но я действительно не могу сказать, что ваше поведение как-то связано с этим... Без сообщений об ошибках мы можем только догадываться.

person shock_gone_wild    schedule 09.04.2015
comment
Ты босс, я тебе говорю! Я даже получил правильный оператор if, но все еще имел проблемы с правами на запись и т. д.! И последнее, как мне указать путь к изображению для пользователя и сохранить его в БД? - person Sylar; 09.04.2015