PHP使用目录字符串上传文件

时间:2018-04-30 23:25:38

标签: php curl

我有一个表示文件路径的字符串,如下所示:$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从字符串发送文件吗?

1 个答案:

答案 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