PHP - cURL文件上传

时间:2017-08-01 11:22:31

标签: php api curl

我正在编写一个脚本来将图像上传到特定的api。上传一个图像不是问题,而是一个以上。 API文档说明如下:

curl -v -s -u username:password \
-H "Content-Type: multipart/form-data" \
-H "Accept: application/vnd.de.xxx.api+json" \
-F "image=@img1.jpeg;type=image/jpeg" \
-F "image=@img2.jpeg;type=image/jpeg" \
-XPUT 'https://services.xxx.de/seller-api/sellers/123/ads/123/images'

我的剧本:

$ch = curl_init();

$images = array(
    'image' => new CURLFile('PATH\1.jpg', 'image/jpeg', 'image')
);

curl_setopt($ch, CURLOPT_URL, 'https://services.xxx.de/seller-api/sellers/123/ads/123/images');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $images);
curl_setopt($ch, CURLOPT_USERPWD, 'USERNAME:PASSWORD');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Host: services.xxx.de',
    'Content-Type: multipart/form-data',
    'Accept: application/vnd.de.xxx.api+json'
));
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

问题是,如果我上传新的图片,api会删除其他图片。但我无法编写一个包含多个相同键的数组:

$images = array(
    'image' => new CURLFile('PATH\1.jpg', 'image/jpeg', 'image'),
    'image' => new CURLFile('PATH\2.jpg', 'image/jpeg', 'image')
);

所以问题是如何使用与文档中的curl命令相同的索引设置多个CURLFiles?

2 个答案:

答案 0 :(得分:0)

在移动卖家api工作;-) 这是解决方案: 1.创建一个像这样的图像文件数组:

$count=0;
$files['image'.$count] = curl_file_create(#a#, 'image/jpeg', #b#)
$count++;

- > #a#服务器上文件的完整限定路径 - > #b#可选择以图像形式显示图像的名称'。$ count

重要提示:数组键必须完全以这种方式命名,而您可以根据需要命名数组; - )

  1. 卷曲选项: - 删除"主机"来自您的HTTP_HEADER 并使用以秒为单位的值添加CURLOPT_CONNECTTIMEOUT; - )
  2. 顺便说一句,在所有实际的php版本中,我们使用TRUE和FALSE而不是0和1作为curl-options的值。

    对我有用......

答案 1 :(得分:-1)

经过数小时搜索后的经验: 使用官方卷曲功能,您无法进行多重上传图像。

您只能使用shell命令上传多个图像。 解决方案:扩展shell脚本以包含要上载的所有图像,然后" shell_exec($ str)"或者执行($ str)。对我来说这很有效。