PHP загрузить файл, используя строку каталога - PullRequest
0 голосов
/ 01 мая 2018

У меня есть строка, которая представляет путь к файлу, как это: D:/folder/another_folder/image_name.png.

Я хочу отправить это в виде файла, используя 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);  

проблема в том, что я получаю путь к файлу из CSV-файла, не просматривая его
Может кто-нибудь помочь с этим и подскажите, как отправить файл через PHP CURL из строки?

1 Ответ

0 голосов
/ 01 мая 2018

Ваша проблема здесь в том, что вы используете json_encode. json_encode не может кодировать объекты CURLFile. Кроме того, JSON не является бинарно-безопасным, поэтому вы не можете отправлять PNG-файлы с помощью json (PNG-файлы содержат двоичные данные, например, включая байт FF / 255, который недопустим в json. Тем не менее, обычным обходным решением является кодирование бинарных файлов). данные в base64, и отправьте base64 в json). прекратите использовать json, просто дайте CURLOPT_POSTFIELD массив, и curl закодирует его в формате multipart/form-data, который является стандартом де-факто для загрузки файлов по протоколу http. идя по этому пути, вы также должны избавиться от заголовка Content-Type: application/json, и curl автоматически вставит Content-Type: multipart/form-data для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...