Как загрузить изображение в определенную папку в облаке с помощью laravel jrm2k6 / cloudder - PullRequest
0 голосов
/ 20 октября 2019

Я хочу обрезать изображение аватара и загрузить его в определенную папку cloudiary, используя Laravel jrm2k6 / cloudder, но столкнулся с ошибкой при загрузке изображения. Может кто-нибудь помочь мне, что не так или показать, как решить?

Ниже приведено сообщение об ошибке, хранящееся в файле журнала.

[2019-10-20 10:39:38] local.ERROR: Invalid Signature 22800853dcbe6c9972b65d99946460f1965a6e06. String to sign - 'folder=media/users/1/avatar&timestamp=
1571535576'. {"userId":1,"exception":"[object] (Cloudinary\\Error(code: 401): Invalid Signature 22800853dcbe6c9972b65d99946460f1965a6e06. String to sig
n - 'folder=media/users/1/avatar&timestamp=1571535576'. at /Users/kondonator/Development/tiny-services/vendor/cloudinary/cloudinary_php/src/Uploader.ph
p:515)
[stacktrace]
#0 /Users/kondonator/Development/tiny-services/vendor/cloudinary/cloudinary_php/src/Uploader.php(374): Cloudinary\\Uploader::call_api('upload', Array,
Array, '/private/var/tm...')
#1 /Users/kondonator/Development/tiny-services/vendor/cloudinary/cloudinary_php/src/Uploader.php(99): Cloudinary\\Uploader::call_cacheable_api('upload'
, Array, Array, '/private/var/tm...')
#2 /Users/kondonator/Development/tiny-services/vendor/jrm2k6/cloudder/src/JD/Cloudder/CloudinaryWrapper.php(122): Cloudinary\\Uploader::upload('/privat
e/var/tm...', Array)
#3 /Users/kondonator/Development/tiny-services/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(239): JD\\Cloudder\\CloudinaryWrapper
->upload('/private/var/tm...', NULL, Array, Array)
#4 /Users/kondonator/Development/tiny-services/app/Http/Controllers/UserController.php(150): Illuminate\\Support\\Facades\\Facade::__callStatic('upload
', Array)
#5 [internal function]: App\\Http\\Controllers\\UserController->update(Object(Illuminate\\Http\\Request), '1')

А ниже приведен код UserController.php.

  $path = $request->file('avatar')
                  ->getRealPath();

  $image = Image::make($path);

  $image->crop($request->width, $request->height, $request->x, $request->y)
        ->resize(200, 200)
        ->save();

  $folder = 'media/users/'.$id.'/avatar';

  Cloudder::upload($path, null, ['folder' => $folder], []);

  $result = Cloudder::getResult();

  $avatar = Cloudder::getPublicId();

Последние являются частью .env, которые взяты из Dashboard Cloudinary -> Данные учетной записи.

CLOUDINARY_API_KEY=XXXXX
CLOUDINARY_API_SECRET=YYYYY
CLOUDINARY_CLOUD_NAME=ZZZZZ

Заранее спасибо.

1 Ответ

0 голосов
/ 20 октября 2019

Строка (folder=media/users/1/avatar&timestamp=1571535576) перед конкатенацией api_secret в конце верна, но должна быть получена подпись 083dc25c1d1e4a90f84336450f21c9fb59b343f5.

Я предлагаю дважды проверить CLOUDINARY_API_SECRET в вашей конфигурации (.env) и если вы внесли какие-либо изменения в нее, вам следует перезапустить сервер, чтобы они вступили в силу.

Что вы также можете сделать, вручную создать правильную подпись в команделиния просто перепроверить с тем, что выбрасывается как часть исключения. Замените <API_SECRET> на действительный в приведенной ниже команде:

echo -n "folder=media/users/1/avatar&timestamp=1571535576<API_SECRET>" | sha1sum

Кроме того, не связано с ошибкой, но я бы порекомендовал оставить имя вашего облака в нижнем регистре в вашей конфигурации. Ответы API будут возвращать url и secure_url со всеми строчными буквами, а также использовать URL-адреса, сгенерированные библиотекой мультимедиа. Запрос ресурсов с другим регистром может привести к разным ключам кеша в CDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...