我正在使用 cakephp 4.0。我尝试在 cloudinary 中上传图像(Laminas\Diactoros\UploadedFile)[关闭]

Posted

技术标签:

【中文标题】我正在使用 cakephp 4.0。我尝试在 cloudinary 中上传图像(Laminas\\Diactoros\\UploadedFile)[关闭]【英文标题】:I am using cakephp 4.0. I try to upload image in cloudinary (Laminas\Diactoros\UploadedFile) [closed]我正在使用 cakephp 4.0。我尝试在 cloudinary 中上传图像(Laminas\Diactoros\UploadedFile)[关闭] 【发布时间】:2020-05-03 00:56:06 【问题描述】:

我的帖子数据图像返回此格式。为什么返回这种类型。我想要 imagea 数组并在 cloudinary 中上传一个图像,你如何使用它。有没有人可以帮忙..

Laminas\Diactoros\UploadedFile Object (
[clientFilename:Laminas\Diactoros\UploadedFile:private] => IMG-20180705-WA0007.jpg
[clientMediaType:Laminas\Diactoros\UploadedFile:private] => image/jpeg
[error:Laminas\Diactoros\UploadedFile:private] => 0
[file:Laminas\Diactoros\UploadedFile:private] => D:\xampp\tmp\phpB830.tmp
[moved:Laminas\Diactoros\UploadedFile:private] => 
[size:Laminas\Diactoros\UploadedFile:private] => 164593
[stream:Laminas\Diactoros\UploadedFile:private] => )

【问题讨论】:

【参考方案1】:

至于“为什么”,文件上传对象更通用,更容易测试,并提供干净、标准化的界面。

虽然您可以通过将 App.uploadedFilesAsObjects 配置选项设置为 false 来切换回使用数组,但 Cloudinary 似乎不需要使用文件上传数组,他们用于上传文件的 PHP SDK 方法接受简单的本地文件路径,即你应该可以做到:

$tmpPath = $uploadedFile->getStream()->getMetadata('uri');
$result = \Cloudinary\Uploader::upload($tmpPath, [/* ... */]);

$tmpPath 将与上传数组的 tmp 键为您提供的路径相同。

对于原始 API 调用,您可能会使用二进制文件数据在 POST 请求中发送它,您也可以通过流轻松访问:

$filePostData = $uploadedFile->getStream()->getContents();

这与读取上传数组的tmp键指向的文件基本相同。

另见

PSR-7: HTTP message interfaces > Uploaded Files Cookbook > Request & Response Objects > File Uploads Cloudinary Documentation > Integrations > PHP SDK > PHP image and video upload

【讨论】:

以上是关于我正在使用 cakephp 4.0。我尝试在 cloudinary 中上传图像(Laminas\Diactoros\UploadedFile)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

条件和在同一领域Cakephp 2.5

Cakephp habtm 关系更新而不是保存

CakePHP 3 编辑上传

CakePHP:向表单添加字段(动态)

如何在 cakephp 2.10 中使用 JWT?

传递数据以查看 CakePHP