php - php curlstrapi cms 多张图片上传
问题描述
我正在尝试通过特定内容类型的 API 将多个图像上传到 Strapi CMS:产品。很难安静,或者我可能做错了。
如果我尝试通过例如邮递员创建创建请求,则会为 php 示例生成此代码:
CURLOPT_POSTFIELDS => array('files.ProductGallery'=> new CURLFILE('/Users/testusr/Desktop/Screen Shot 2021-06-16 at 19.24.58.png'),'files.ProductGallery'=> new CURLFILE('/Users/testusr/Desktop/Screen Shot 2021-06-16 at 19.22.03.png'),'data' => '{"Name" : "test"}','files.MainImage'=> new CURLFILE('/Users/testusr/Desktop/Screen Shot 2021-06-16 at 19.22.03.png')),
如您所见,files.ProductGallery 正在被复制,因此如果我直接在 PHP 中运行它,即使邮递员生成此代码示例,这也不起作用。
解决这个问题的首选方法是什么?我试过以下(将图像嵌套到files.ProductGallery中:
$query = [
'data' => $paramsData,
'files.ProductGallery' => [new CURLFile('68a698b24509cc0539ec724238326c99.jpg', 'image/jpg', '68a698b24509cc0539ec724238326c99.jpg'), new CURLFile('68a698b24509cc0539ec724238326c99.jpg', 'image/jpg', '68a698b24509cc0539ec724238326c99.jpg')],
];
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://localhost:1337/products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $query,
));
但这给了我数组到字符串的转换。如果我尝试执行邮递员请求(直接进入应用程序),它实际上正在工作,但他们提供的 PHP 示例却很奇怪。我不是在谈论邮递员(我喜欢这个工具),只是想知道 php 示例代码,以及执行上述操作的首选方法是什么 :)
完整的邮递员示例:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://someurl/products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('files.ProductGallery'=> new CURLFILE('/Users/testusr/Desktop/Screen Shot 2021-06-16 at 19.24.58.png'),'files.ProductGallery'=> new CURLFILE('/Users/testusr/Desktop/Screen Shot 2021-06-16 at 19.22.03.png'),'data' => '{"Name" : "test"}','files.MainImage'=> new CURLFILE('/Users/testusr/Desktop/Screen Shot 2021-06-16 at 19.22.03.png')),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
与我尝试的相比:
$curl = curl_init();
$query = [
'data' => $paramsData,
'files.ProductGallery' => [new CURLFile('68a698b24509cc0539ec724238326c99.jpg', 'image/jpg', '68a698b24509cc0539ec724238326c99.jpg'), new CURLFile('68a698b24509cc0539ec724238326c99.jpg', 'image/jpg', '68a698b24509cc0539ec724238326c99.jpg')],
];
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://someurl/products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $query,
));
$response = curl_exec($curl);
解决方案
推荐阅读
- c++ - 使用 Qt 标头的递归包含时出错
- python - 检测熊猫中的列表类型
- swift - 模态视图控制器的segue(展开和常规)错误
- memory - 编译时程序是编译到主存还是程序内存?
- swift - Observable 变化时不返回值
- java - 具有自定义逻辑的 Java 8 Stream groupingBy
- javascript - Python 异步代码中的 Promise.race 等价物是什么?
- angular - innerHTML 未在 UI 中更新
- node.js - 错误:使用任何库发出获取请求时解析错误问题
- python - Python 初学者:使用循环创建具有动态属性的动态类对象