Я работаю над приложением, которое включает небольшой REST API. Один из этих методов должен принимать большой (почти 300 МБ) двоичный файл, загружаемый по запросу PUT.
Поскольку файл довольно большой и существует некоторый риск одновременного выполнения нескольких таких запросов, я бы хотел избежать хранения всего тела запроса в памяти. Я надеялся сделать это, прочитав поток php://input
напрямую и перекачав его в файл.
Однако метод input()
контроллера, похоже, мешает. Я понимаю смысл input()
— как только вы читаете поток php://input
, он исчезает, поэтому input()
удерживает его для повторного доступа. Очевидно, это поведение, которое я хочу обойти в данном случае.
Однако кажется, что input()
вызывается где-то до запуска кода моего контроллера, потому что к тому времени, когда я добираюсь до php://input
, читать уже нечего.
Итак, мой вопрос: есть ли способ для контроллера CakePHP передавать очень большое тело запроса на диск без предварительной загрузки всего этого в память?