我有一个表示文件路径的字符串,如下所示:$ch = curl_init();
if (function_exists('curl_file_create')) { // php 5.5+
$cFile = curl_file_create('D:/folder/another_folder/image_name.png');
}else{
$cFile = '@' . realpath('D:/folder/another_folder/image_name.png');
}
$fields['userPhoto'] = $cFile;
$fields['uploadedfrom'] = 'web';
curl_setopt($ch, CURLOPT_URL, 'http://some_url.com');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
));
$result = curl_exec($ch);
curl_close($ch);
。
我希望使用PHP curl将其作为文件发送我已经这样做但是它不起作用
{{1}}
问题是我从csv文件中获取文件路径而不是浏览它 任何人都可以帮助解决这个问题并告诉我如何通过PHP CURL从字符串发送文件吗?
答案 0 :(得分:2)
你的问题是你正在使用json_encode。 json_encode无法编码CURLFile对象。另外,JSON不是二进制安全的,所以你不能用json发送PNG文件(PNG文件包含二进制数据,例如包括FF / 255字节,这在json中是非法的。也就是说,常见的解决方法是编码二进制文件base64中的数据,并在json中发送base64)。停止使用json,只需给CURLOPT_POSTFIELD数组,curl将以multipart/form-data
格式对其进行编码,这是通过http协议上传文件的事实上的标准。走这条路线,你还必须摆脱Content-Type: application/json
标题,卷曲会自动为你插入Content-Type: multipart/form-data
。