Как отправить несколько файлов (изображений) с помощью CURLOPT_POSTFIELDS? Сайт сделан на LaravelPhp

Кемеровские программисты php общаются здесь
Ответить
Гость
 Как отправить несколько файлов (изображений) с помощью CURLOPT_POSTFIELDS? Сайт сделан на Laravel

Сообщение Гость »


На моем веб-сайте Laravel я пытаюсь отправить форму с несколькими изображениями в прокси-системе, где я получаю данные через запрос, а затем форматирую эти данные для отправки через CURLOPT_POSTFIELDS. У меня есть следующая ошибка: local.ERROR: исключение «ErrorException» с сообщением «Преобразование массива в строку» в /code/lib/Core/ProxyToCore15.php:53

Такова структура отправляемых данных

array(2) { ["json"]=> string(254) "{"contact":{"name":"teste","phone":"(00) 00000-0000","type":"3"},"attributes":{"name": "teste","phone":"(00) 00000-0000","address":"a","authorization":"Авторизационный посредничество в продаже и местоположении","type":"3","url" :"localhost/cadastre-seu-imovel?"}}" ["файлы"]=> массив (5) { [0]=> объект(CURLFile)#268 (3) { ["имя"]=> строка(14) "/tmp/phpLDEAca" ["мим"]=> строка(10) "изображение/jpeg" ["имя_записи"]=> строка(14) "HERO_Model.jpg" } [1]=> объект(CURLFile)#254 (3) { ["имя"]=> строка(14) "/tmp/phpMkBpGp" ["мим"]=> строка(10) "изображение/jpeg" ["имя_записи"]=> строка(23) "20220929104711_2202.jpg" } [2]=> объект(CURLFile)#253 (3) { ["имя"]=> строка(14) "/tmp/phpmAlpEh" ["мим"]=> строка(10) "изображение/jpeg" ["имя_записи"]=> string(19) "carrosnagaragem.jpg" } [3]=> объект(CURLFile)#269 (3) { ["имя"]=> строка(14) "/tmp/phpAnelKL" ["мим"]=> строка(10) "изображение/jpeg" ["имя_записи"]=> string(54) "original-d545b109b5f7829cd6005cd8beca05ef-1024x659.jpg" } } } отправка только одного изображения работает

array(2) { ["json"]=> string(254) "{"contact":{"name":"teste","phone":"(00) 00000-0000","type":"3"},"attributes":{"name": "teste","phone":"(00) 00000-0000","address":"a","authorization":"Авторизационный посредничество в продаже и местоположении","type":"3","url" :"localhost/cadastre-seu-imovel?"}}" ["файлы"]=> объект(CURLFile)#264 (3) { ["имя"]=> строка(14) "/tmp/phpjfDijd" ["мим"]=> строка(10) "изображение/jpeg" ["имя_записи"]=> строка(14) "HERO_Model.jpg" } } Судя по тому, что я заметил, ошибка возникает из-за того, что ключ файлов представляет собой массив, когда я отправляю несколько изображений. Я пытался использовать http_build_query для массива файлов, но получаю другую ошибку: время ожидания 504.

мой текущий код такой
публичная функция send() { $curl = curl_init(); $url = config('services.core15.url') .'/'.$this->request->path().'?'.$this->request->getQueryString(); //дд($url); curl_setopt($curl, CURLOPT_URL, $url); $headers = $this->getHeaders(); Curl_setopt ($ Curl, CURLOPT_HEADER, правда); curl_setopt($curl, CURLOPT_ENCODING, "gzip"); Curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->request->getMethod()); if ($this->request->method() === "POST") { $headers[] = 'тип контента: multipart/form-data'; Curl_setopt ($ Curl, CURLOPT_POST, правда); Curl_setopt($curl, CURLOPT_POSTFIELDS, $this->getBody()); //dd($this->getBody()); //curl_setopt($curl, CURLOPT_POSTFIELDS, ['{["json"]="contact":"1"}']); } curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); Curl_setopt ($ Curl, CURLOPT_RETURNTRANSFER, правда); пытаться { $response = curl_exec($curl); $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE); //$responseHeader = взорваться("\n", substr($response, 0, $headerSize)); //дд($responseHeader); $responseBody = substr($response, $headerSize); $responseCode = curl_getinfo($curl, CURLINFO_RESPONSE_CODE); $result = $this->makeResponse($responseBody, substr($response, 0, $headerSize), $responseCode); } catch (\Exception $e) { dd($e, curl_error($curl)); } Curl_close ($ Curl); вернуть $результат; }; публичная функция getBody() { $data = $this->request->all(); $postFields = []; // Инициализируем postFields как массив vazio foreach ($this->request->files->keys() as $fileKey) { $files = $this->request->file($fileKey); $toUpload = ноль; если (count($files) > 1) { /** @var UploadedFile[] $files */ foreach ($files as $index => $file) { $toUpload["файл" . ($index + 1)] = curl_file_create($file->getPathname(), $file->getMimeType(), $file->getClientOriginalName()); } } еще { $toUpload = curl_file_create($data['files'][0]->getPathname(), $data['files'][0]->getClientMimeType(), $data['files'][0]->getClientOriginalName ()); } // Определение полей postFields в цикле do $postFields = [ 'json' => $data['json'], 'files' => $toUpload ]; } $данные = $postFields; вернуть $данные; } Я попытался использовать http_build_query для массива файлов, но получил еще одну ошибку: тайм-аут 504.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»