Отправить файл через cURL

Мне нужно отправить файл через cURL на сервер, и сервер требует от файла следующее:

  • имя файла
  • CheckSum
  • MIMETYPE
  • размер

Я пробовал следующие методы:

  1. Используя @ и полный путь к файлу
  2. файл-получить содержимое
  3. Просто полный путь
  4. новый CURLFile с дополнительными параметрами и без

    $mime = mime_content_type($file);
    $info = pathinfo($file);
    $name = $info['basename'];
    $output = new CURLFile($file, $mime, $name);
    
  5. curl_file_create

  6. curl_setopt ($ ch, CURLOPT_SAFE_UPLOAD, true);

Когда я использую @, он просто запрашивает дополнительные детали, упомянутые выше. Когда я использую новый CURLFile и curl_file_create, браузер просто отключается.

Но когда я использую это непосредственно в bash, вот так:

curl -X POST -F 'file=@dog.jpg' -F 'category=video' -F 'language=English' -F
'subject_name= Accounting' -F 'studyYear=ALL' -F 'title=Test resources 3' -F
'description=This is a test 3' http://127.0.0.1:5000/postfile -u root -p

Тогда это работает без нареканий. Я не уверен, что я должен делать в php.

редактировать

Это ошибка, которую я получаю, когда cURL на сервер:

{"query":"add a new resource","doc":"resource-2db43d6f","info":"Schema validation failed","_xerror":true,"message":"child \"filename\" fails because [\"filename\" is required]. child \"checkSum\" fails because [\"checkSum\" is required]. child \"mimeType\" fails because [\"mimeType\" is required]. child \"size\" fails because [\"size\" is required]","isJoi":true,"name":"ValidationError","details":[{"message":"\"filename\" is required","path":"filename","type":"any.required","context":{"key":"filename"}},{"message":"\"checkSum\" is required","path":"checkSum","type":"any.required","context":{"key":"checkSum"}},{"message":"\"mimeType\" is required","path":"mimeType","type":"any.required","context":{"key":"mimeType"}},{"message":"\"size\" is required","path":"size","type":"any.required","context":{"key":"size"}}],"_object":{"_id":"resource-2db43d6f","owner":1,"created":1541769732,"private":false,"feedback":false,"category":"video","language":"English","studyYear":"ALL","title":"testing code","description":"This is a test","subject":0},"reqPath":"POST /api/1.0/resources/","detail":"child \"filename\" fails because [\"filename\" is required]. child \"checkSum\" fails because [\"checkSum\" is required]. child \"mimeType\" fails because [\"mimeType\" is required]. child \"size\" fails because [\"size\" is required]","person":"user"}`

Поэтому эти поля должны быть включены в сам файл. И не как дополнительный.

0

Решение

Я нашел этот пример, делая быстрый поиск в Google.

Ключевые слова, используемые для поиска: отправить файл через cURL в php

Следующий код делает запрос http://example.com/, загружает
файл example.txt и выводит ответ.

// initialise the curl request
$request = curl_init('http://example.com/');

// send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt(
$request,
CURLOPT_POSTFIELDS,
array(
'file' => '@' . realpath('example.txt')
));

// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);

// close the session
curl_close($request);

Кредиты:

Кейт Морли
http://code.iamkate.com/php/sending-files-using-curl/

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector