2017-08-01 89 views
0

我正在编写一个脚本来上传图片到一个特定的api。上传一张图片不是问题,但不止一个。该API文档说以下内容:PHP - cURL文件上传

curl -v -s -u username:password \ 
-H "Content-Type: multipart/form-data" \ 
-H "Accept: application/vnd.de.xxx.api+json" \ 
-F "[email protected];type=image/jpeg" \ 
-F "[email protected];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') 
); 

所以,问题是我怎么可以设置多个CURLFiles与像文档中的curl命令相同的索引?

+0

看到这个职位https://stackoverflow.com/questions/44474192/upload-multiple-files-with-curl,或许它会帮助你。 –

+0

不,不幸的是,不是因为api回应:{“errors”:[{“key”:“unsupported-form-element”}]}这意味着cURL文件的关键字必须是“image”,而不是其他。 ..但非常感谢你! –

+0

然后在循环中尝试您的Curl调用。 –

回答

-1

我经过几个小时的搜索之后的体验: 使用官方卷曲功能,您不能进行多次上传图像。

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

0

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

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

- 上>#A#完全合格的路径到您的文件你服务器 - >#b#可选地以'image'形式表示图像的名称$ count

重要提示:array-key必须以这种方式正确命名,而您可以根据需要命名阵列;-)

    对于卷曲个
  1. 选项: - 从你的HTTP_HEADER 删除“主机”,并与在几秒钟;-)

值添加CURLOPT_CONNECTTIMEOUT顺便说一句,在所有实际的PHP版本中,我们使用的真假,而不是0和1作为卷曲选项的值。

它为我...