API загрузки файлов Laravel с использованием Postman

В моем контроллере есть следующий код:

    public function upload(Request $request)
    {
       $files = $request->file('uploads');
       if(!empty($files)) {
           foreach($files as $file) {
               Storage::put($file-getClientOriginalName(),file_get_contents($file));
        }
    }

Что вызывается через api.php в routes:

Route::post('/upload', [ 'uses' => 'UploadController@upload' ]);

Я использую почтальон для тестирования своего приложения.

Заголовок:

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

Тело:

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

Необработанные:

POST / scotic / public / api / upload HTTP / 1.1 Хост: 127.0.0.1:80 Content-Type: multipart / form-data; border = ---- WebKitFormBoundary7MA4YWxkTrZu0gW Cache-Control: no-cache Postman-Token: 0caf7349-5c91-e5f1-766f-72a3f1e33900

------ WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name = "загрузки []"; filename = "banana.png" Content-Type: image / png Данные png здесь находятся .. ------ WebKitFormBoundary7MA4YWxkTrZu0gW--

$files пуст после загрузки файла. Что я делаю неправильно?

Немного покопавшись, я заставил свой загрузчик работать без почтальона, я заметил, что в Content-Type в почтальоне отсутствует '--boundary'. LHS работает, RHS (почтальон) не работает.

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

Любые идеи?


person Starfish    schedule 08.10.2017    source источник
comment
Попробуйте реализовать через данные base64.   -  person Nitish Kumar    schedule 08.10.2017
comment
Я сравнил почтальона с веб-браузером, кажется, что в почтальоне отсутствует '--boundary' - есть идеи, как это исправить?   -  person Starfish    schedule 08.10.2017


Ответы (1)


Проблема заключалась в том, что я явно указывал Content-Type в почтальоне.

Согласно одному из ответов из этого сообщения:

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

person Starfish    schedule 12.10.2017
comment
Да, я просто удалил Content-Type из заголовка ввода, и это сработало. Я бы посоветовал вам использовать Wireshark для захвата TCP-пакетов и устранения неполадок. - person Starfish; 05.07.2018
comment
Есть ли шанс, что вы позже использовали guzzle, чтобы написать настоящий пост? У меня такой же случай, как и у вас, с сообщением, включающим файл и данные. Он работает с Postman благодаря вашему сообщению, но я не могу заставить его работать с кодом. Использование GuzzleHttp для отправки запроса - person jeremy_nikolic; 31.07.2019