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

如何使用laravel jrm2k6/cloudder将图像上载到cloudiary上的特定文件夹,laravel,cloudinary,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&timesta

我想裁剪头像图像并使用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的Dashboard->Account Details

CLOUDINARY_API_KEY=XXXXX
CLOUDINARY_API_SECRET=YYYYY
CLOUDINARY_CLOUD_NAME=ZZZZZ
提前谢谢

结尾处包含的
api_secret
之前的字符串(
folder=media/users/1/avatar×tamp=1571535576
)是正确的,但它应该生成的签名是
083dc25c1d1de4a90f84336450f21c9fb59b343f5

我建议仔细检查配置(.env)中的
CLOUDINARY\u API\u SECRET
,如果您对其进行了任何更改,则应重新启动服务器,使其生效

您还可以在命令行上手动生成正确的签名,以便与作为异常一部分抛出的签名进行双重检查。用下面命令中的实际代码替换

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

此外,与错误无关,但我建议在配置中保持云名称的小写形式。API响应将返回
url
secure\u url
,并使用媒体库生成的url。请求不同大小写的资源会导致CDN上的缓存密钥不同。

根据您的反馈,我做了以下操作,但仍然无法解决问题。首先,我仔细检查了.env中的行,发现它们是正确的。第二,我在MacOS上根据你的公式计算了签名。结果,浏览器显示的签名和我在MacOS上计算的签名不一样。我还尝试了一些算法,如1(默认值)、224、256、384、512、512224、512256,但从来都不一样。第三,我忘了提到拉威尔的版本。是6.3.0。你还有什么建议吗?再次提前感谢。我建议您也检查系统的环境变量,以防有一个名为CLOUDINARY\u URL或任何其他CLOUDINARY\u的变量会覆盖配置中设置的任何其他凭据。此外,我建议添加一些调试代码,以打印出Cloudinary\HttpClient的api\u sign\u request()方法中正在签名的值;这将告诉您正在签名的字符串(包括API Secret)的实际值,并有助于缩小范围。代码如下:`clouder::upload($path,null,['folder'=>$folder,'overwrite'=>TRUE,'resource\u type'=>'image']);`。谢谢你的建议。