如何使用laravel jrm2k6 / cloudder将图像上传到cloudiary上的特定文件夹

时间:2019-10-20 05:19:46

标签: laravel cloudinary

我想裁剪头像图像,并使用Laravel jrm2k6 / cloudder将其上传到cloudiary的特定文件夹中,但是上传图像时遇到错误。 谁能帮助我解决问题或显示解决方法?

以下是存储在日志文件中的错误消息。

[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的最后一部分来自Cloudinary的信息中心->帐户详细信息。

CLOUDINARY_API_KEY=XXXXX
CLOUDINARY_API_SECRET=YYYYY
CLOUDINARY_CLOUD_NAME=ZZZZZ

先谢谢了。

1 个答案:

答案 0 :(得分:0)

folder=media/users/1/avatar&timestamp=1571535576末尾被连接之前的字符串(api_secret)是正确的,但是应该产生的签名是083dc25c1d1e4a90f84336450f21c9fb59b343f5

我建议仔细检查配置(.env)中的CLOUDINARY_API_SECRET,如果对它进行了任何更改,则应重新启动服务器,以使其生效。

您还可以做的是在命令行上手动生成正确的签名,以仔细检查作为异常一部分抛出的签名。在下面的命令中,将<API_SECRET>替换为您的实际值:

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

此外,与该错误无关,但我建议在您的配置中将您的云名称保留为小写。 API响应将全部返回小写形式的urlsecure_url,使用媒体库生成的URL也是这种情况。请求具有不同大小写的资源将导致CDN处的缓存键不同。