Intereting Posts
Удаленные операции с MySQL на базе Android с использованием веб-службы с php Как установить Php5.6 в amazon linux php связывает динамическое число переменных для запроса пакетной вставки как передать эти строки из php в javascript При использовании уникальной буквенно-цифровой строки для короткого URL-адреса лучше ли хранить созданную строку в базе данных или кодировать / декодировать «на лету»? XDebug не прерывает точки останова от пакета php-debug от атома Codeigniter Session Данные недоступны на других страницах после входа в систему Отключение сеанса PHP с помощью JQuery / AJAX Flatten Array: сохранить индекс, значение равное положению в массиве Php: Предупреждение: заголовок может содержать не более одного заголовка, а новая строка обнаружена в Как найти Duplicate значения в массиве с помощью php? Регистрация не может быть подтверждена в Laravel 5 Преобразование в 64 бит int Когда я создаю zip-файл каталога с большим zip-файлом в PHP, я сталкиваюсь с ограничением памяти curl всегда возвращает false

Загрузить файл с использованием конечной точки Guzzle 6 в API

Я могу загрузить файл в конечную точку API, используя Postman.

Я пытаюсь перевести это на загрузку файла из формы, загружая его с помощью Laravel и отправляя на конечную точку с помощью Guzzle 6.

Снимок экрана о том, как он выглядит в Postman (я специально упустил URL-адрес POST) введите описание изображения здесь

Ниже приведен текст, который он генерирует, когда вы нажимаете ссылку «Создать код» в POSTMAN:

POST /api/file-submissions HTTP/1.1 Host: strippedhostname.com Authorization: Basic 340r9iu34ontoeioir Cache-Control: no-cache Postman-Token: 6e0c3123-c07c-ce54-8ba1-0a1a402b53f1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="FileContents"; filename="" Content-Type: ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="FileInfo" { "name": "_aaaa.txt", "clientNumber": "102425", "type": "Writeoff" } ----WebKitFormBoundary7MA4YWxkTrZu0gW 

Ниже приведена функция контроллера для сохранения файла и другой информации. Файл загружается правильно, я могу получить информацию о файле.

Я думаю, что проблема заключается в настройке массива multipart и headers с правильными данными.

 public function fileUploadPost(Request $request) { $data_posted = $request->input(); $endpoint = "/file-submissions"; $response = array(); $file = $request->file('filename'); $name = time() . '_' . $file->getClientOriginalName(); $path = base_path() .'/public_html/documents/'; $resource = fopen($file,"r") or die("File upload Problems"); $file->move($path, $name); // { "name": "test_upload.txt", "clientNumber": "102425", "type": "Writeoff" } $fileinfo = array( 'name' => $name, 'clientNumber' => "102425", 'type' => 'Writeoff', ); $client = new \GuzzleHttp\Client(); $res = $client->request('POST', $this->base_api . $endpoint, [ 'auth' => [env('API_USERNAME'), env('API_PASSWORD')], 'multipart' => [ [ 'name' => $name, 'FileContents' => fopen($path . $name, 'r'), 'contents' => fopen($path . $name, 'r'), 'FileInfo' => json_encode($fileinfo), 'headers' => [ 'Content-Type' => 'text/plain', 'Content-Disposition' => 'form-data; name="FileContents"; filename="'. $name .'"', ], // 'contents' => $resource, ] ], ]); if($res->getStatusCode() != 200) exit("Something happened, could not retrieve data"); $response = json_decode($res->getBody()); var_dump($response); exit(); } 

Ошибка, которую я получаю, снимок экрана о том, как он отображается с использованием отладочного представления Laravel:

введите описание изображения здесь

То, как вы отправляете данные POST, ошибочно, поэтому полученные данные неверны.

Документы Guzzle :

Значение multipart – это массив ассоциативных массивов, каждый из которых содержит следующие пары ключей:

name : (string, required) имя поля формы

contents : (StreamInterface / resource / string, required) Данные для использования в элементе формы.

headers : (array) Необязательный ассоциативный массив пользовательских заголовков для использования с элементом формы.

filename : (string) Необязательная строка для отправки в качестве имени файла в части.

Использование ключей из приведенного выше списка и установка ненужных заголовков без разделения каждого поля на один массив приведет к созданию плохого запроса.

 $res = $client->request('POST', $this->base_api . $endpoint, [ 'auth' => [ env('API_USERNAME'), env('API_PASSWORD') ], 'multipart' => [ [ 'name' => 'FileContents', 'contents' => file_get_contents($path . $name), 'filename' => $name ], [ 'name' => 'FileInfo', 'contents' => json_encode($fileinfo) ] ], ]);