169 похожих чатов

Привет всем! Столкнулся с следующей проблемой. У меня есть два сервера на

laravel. Мне нужно с одного на другой передать файл + некоторые данные.

То есть КЛИЕНТ ->(отправил данные с файлом)->БЭК1->(отправил данные с файлом)->БЭК2

Я хочу сохранять вложенность параметров, и сделать этот момент максимально гибким.

Поэтому решил использовать HTTP::attach

Написал рекурсивный метод, который пробегается по всем элементам массива, и если это файл, то в запрос подкидывает его через attach. На выходе такой код

$response = Http::withHeaders(['Accept' => 'application/json']);
self::attachFilesToRequest($data, $response);
$response = $response->post($url, $data);

Но к сожалению проблема оказалась в том, что, если запрос комбинированный , то на месте ->post($url, ВОТ ТУТ он хочет видеть уже массив такого типа
[
[
'name' => 'params 1',
'content' => 'content....'
]
])

Иначе я получаю ошибку A 'contents' key is required

https://stackoverflow.com/questions/68409031/laravel-post-file-with-httpattach-error-a-contents-key-is-required

вот такая же проблема.

Собственно сам вопрос. Есть ли варианты полегче? Или придётся ещё рекурсивно собирать параметры.

Надеюсь, что нормально объяснил, спасибо за внимание

13 ответов

32 просмотра

А какую проблему ты изначально решаешь? Ты описал свой способ решения, но не задачу

Артём- Автор вопроса
Andrey Kolesnikov
А какую проблему ты изначально решаешь? Ты описал ...

Мой способ решения не работает( Проблема в том, что я не могу передать по HTTP:client данные с файлами на второй сервер.Либо могу передать данные, но не файл, либо могу к запросу подкинуть файлы, через attach, но тогда данные нужно в виде multipart передать, а я что-то не могу понять, как вложенность массива данных сохранить, при таком требовании.

Артём
Мой способ решения не работает( Проблема в том, ч...

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

Артём- Автор вопроса

Думаю, что файлом. Вариант перенапрапавить запрос не подойдёт, так как на первом бэке, я могу подкинуть что-то в данные, в общем данные нужны для некоторой логики. Я на втором бэке хочу получить свои данные в той же иерархии, в которой и отправил + чтобы мог спокойно работать с файлом, например $request->data['fale']->getClientOriginalName() и т.д. Если существует вариант подкинуть некоторые данные в запрос и перенаправить на второй бэк, то тоже будет круто

Артём
Думаю, что файлом. Вариант перенапрапавить запрос ...

Не делай это в реалтайме. 1. Сохрани файл 2. В очередь поставь обогащение данными. 3. После завершения шага 2 - в очередь ставь отправку на БЭК2 4. По необходимости отправь клиенту сообщение в сокет, что все збс обработано

Артём- Автор вопроса
Andrey Kolesnikov
Не делай это в реалтайме. 1. Сохрани файл 2. В оч...

Окей, это я понимаю. Но проблема именно в том, как отправить файл\файлы, вместе с данными, если HTTP::attach так себя ведёт(ссылка, которую я прикреплял выше). Я понимаю, что долгие действия должны попадать в очередь, чтобы клиент не ждал.

Артём
Окей, это я понимаю. Но проблема именно в том, как...

Блин, ну тогда гугли по Guzzle proxy request to different server

Артём
Окей, это я понимаю. Но проблема именно в том, как...

Если хочешь решать задачу именно таким путем, попробуй альтернативные варианты вплоть до прямого использования curl. Бывает что либы специфически отрабатывают некоторые кейсы и тут либо идешь в код либы и делаешь PR чтобы это пофиксить у них, либо ищешь альтернативные решения.

Артём- Автор вопроса

Тоже вот думаю про curl

Артём
Тоже вот думаю про curl

Но вообще все эти перекидывания запросами в реалтайме выглядят как костыли 🙂

Артём- Автор вопроса
Sergey Shitikov
Но вообще все эти перекидывания запросами в реалта...

В реалтайме временно. Но джоба же тут не исправит проблему. Архитектура действительно костыльная самой приложухи, что приходится с одного бэка на второй кидать. Там типа второй общий, но и через первый необходимо данные пропустить( Поэтому так. Вот столкнулся с файлами и что-то прифигел, хотя казалось бы тривиально задача выглядит(

Артём
В реалтайме временно. Но джоба же тут не исправит ...

ну обычно когда несколько серверов и нужно на всех с файлами работать, делают общее хранилище через s3 или sftp какой нибудь как выше писали. Файл сохраняешь сразу, а мета информацию по частям в рамках своих процессов, при этом сам файл будет везде доступен

Артём- Автор вопроса
Sergey Shitikov
ну обычно когда несколько серверов и нужно на всех...

Тогда так и сделаю, а то уже два дня вожусь с этим. Спасибо за совет

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта