Файл пуст, когда POST файл с CURLOPT_POSTFIELDS - PullRequest
4 голосов
/ 14 февраля 2012

Я пытаюсь загрузить файл с помощью веб-службы RESTful следующим образом:

$filename = "pathtofile/testfile.txt";
$handle = fopen($filename, "r");
$filecontents = fread($handle, filesize($filename));
fclose($handle);

$data = array('name' => 'testfile.txt', 'file' => $filecontents);

$client = curl_init($url);
curl_setopt($client, CURLOPT_POST, true);
curl_setopt($client, CURLOPT_POSTFIELDS, $data);
curl_setopt($client, CURLOPT_RETURNTRANSFER, 1);
curl_close($client);

Но я сохраняю gettig файл пуст в качестве ответа на этот запрос.

Я также попытался отправить путь к файлу, например:

$data = array('name' => 'testfile.txt', 'file' => 'pathtofile/testfile.txt');
curl_setopt($client, CURLOPT_POSTFIELDS, $data);

Или: просто отправляет содержимое файла только как:

curl_setopt($client, CURLOPT_POSTFIELDS, $filecontents);

Но тот же ответ: файл пуст .

Обратите внимание, что: файл существует и не пуст, и я просто пытаюсь загрузить файл без дополнительных полей.

Я видел этот пост , но та же проблема, есть идеи?

1 Ответ

1 голос
/ 14 февраля 2012

Попробуйте это:

$data = array ('myfile' => '@'.$filename);

Это заполнит $_FILE ['myfile'] для получающего конца.

Редактировать: в на самом деле поместить содержимое файла как тело, вы можете сделать это напрямую:

//Get the file data
$body = file_get_contents ($filename);
$len = strlen ($body);

//Open a direct connection to the server on port 80
$socket = fsockopen ('hostname.example.com', 80);

//Write the HTTP request headers
fwrite ($socket, "POST /path/to/url HTTP/1.1\r\n");
fwrite ($socket, "Host: hostname.example.com\r\n");
fwrite ($socket, "Connection: Close\r\n");
fwrite ($socket, "Content-Length: " . $len . "\r\n");

//Empty line marks end of headers, start of body
fwrite ($socket, "\r\n");

//Actually write the body
fwrite ($socket, $body);

//Get the result (half a kB at a time)
$result = '';
while (!feof ($socket)) $result .= fread ($socket, 512);

//Clean up nicely
fclose ($socket);

Обратите внимание, что этот код не проверен, но он должен дать вам общее представление.

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