Как мне отправить файл на сервер api в laravel клиентом Guzzle

Подскажите, пожалуйста, как мне отправить файл для загрузки на api?

На сервере api у нас есть метод post, который дает два параметра: один name в запросе и файл в formData, затем он дает ссылку в качестве тела ответа. Я собираюсь отправить файл через клиент guzzle в таком формате:

$file = $request->file('InputFile');
$file_path = $file->getPathname();
$response = $this->CX_Client->post('/file/upload?name='.$fileName, [
                'formData' =>
                [
                    'file' =>
                    [
                            'name'     => 'InputFile',
                            'contents' => fopen($file_path, 'r'),
                            'filename' => $fileName
                    ]

                ]
            ]);

Но это не работает, и сервер не может найти свои параметры в этом запросе. Что со мной не так?


person M Taheri    schedule 14.10.2017    source источник


Ответы (2)


Вы должны использовать multipart вместо formData

https://guzzle.readthedocs.io/en/latest/request-options.html#multipart

$response = $this->CX_Client->post('/file/upload?name='.$fileName, [
    'multipart' => [
        [
            'name'     => 'foo',
            'contents' => 'data',
            'headers'  => ['X-Baz' => 'bar']
        ],
        [
            'name'     => 'baz',
            'contents' => fopen('/path/to/file', 'r')
        ],
        [
            'name'     => 'qux',
            'contents' => fopen('/path/to/file', 'r'),
            'filename' => 'custom_filename.txt'
        ],
    ]
]);
person Grigorii Sokolik    schedule 16.10.2017

Я сохраняю загруженный файл в публичное-> хранилище (используя ремесленную ссылку), а затем пытаюсь загрузить его на сервер. Но я не могу получить fopen ('/ path / to / file', 'r')

Пробуем 'contents' => fopen('/' . $filename, file_get_contents($image), 'r')

но ошибка:

{message: "fopen(/1_1.jpeg): failed to open stream: No such file or directory",…}
exception: "ErrorException"
file: "/Users/marcellopato/Sites/primorossicontemplado/app/Http/Controllers/DocumentoController.php"
line: 234
message: "fopen(/1_1.jpeg): failed to open stream: No such file or directory"
trace: [{function: "handleError", class: "Illuminate\Foundation\Bootstrap\HandleExceptions", type: "->"},…]

Что я делаю не так?

person Marcello Patto    schedule 14.05.2019