我尝试使用PHP的CURL方法通过POST发送图像。 我将图片发送到API,该API需要POST字段' photo_file'成为一个形象。 我设置了' photo_file'到@后跟文件名。 但是,当我发出请求时,API会收到文字字符串' @ filename'而不是文件内容。
以下是相关代码:
致电代码:
$data = array(
'campaign_id' => $_POST['campaign_id'],
);
$img_source = realpath($img_source); // "/Users/andrew/Sites/roo/9699d27bb09fda3133701ca9af084e3d.jpg"
$response = $y->upload_photo($img_source, $data);
$ Y-> upload_photo():
public function upload_photo($img_source, $data) {
$fields = array(
'campaign_id' => $data['campaign_id'],
'photo_file' => '@' . $img_source
);
return $this->request('photos', $fields, 'post');
}
$ this-> request()(相关部分):
public function request($function, $fields = array(), $method = 'get') {
$ch = curl_init();
$url = $this->host . $function;
$curlConfig = array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPHEADER => array('Accept: application/json', 'Expect:'),
CURLOPT_VERBOSE => 1,
CURLOPT_HEADER => 1,
);
if ($method == 'post') {
$curlConfig[CURLOPT_POST] = 1;
$curlConfig[CURLOPT_POSTFIELDS] = true;
$curlConfig[CURLOPT_POSTFIELDS] = $fields;
}
curl_setopt_array($ch, $curlConfig);
$result = curl_exec($ch);
list($header_blob, $body) = explode("\r\n\r\n", $result, 3);
$this->http_status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return json_decode($body);
}
API返回一个错误,当它的开发人员查看日志时,他看到他的请求是:
'campaign_id' => '4'
'photo_file' => '@/Users/andrew/Sites/roo/9699d27bb09fda3133701ca9af084e3d.jpg'
所以将@添加到文件的开头并没有实际发送文件的内容,就像我理解的那样。此外,API可以与其他使用它的平台一起使用,所以问题肯定在我的最后。