Задать вопрос
@MasterCopipaster

Symfony5 контроллер загрузки файла седает слишком много RAM почему?

Столкнулся с проблемой, скрипт падает с ошибкой
Error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 534773792 bytes) at /vendor/symfony/http-foundation/Request.php:1559

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

Request.php:1559
if (null === $this->content || false === $this->content) {
            $this->content = file_get_contents('php://input');
        }


Что я не так делаю? вот мой контроллер...
/**
     * @Route("/send/file", name="send_file", methods={"POST"})
     * @param Request $request
     * @param MailerInterface $mailer
     * @param LoggerInterface $logger
     * @return JsonResponse
     * @throws \Exception
     */
    public function newFile(Request $request,MailerInterface $mailer,LoggerInterface $logger)
    {
        $storage = $this->getParameter('file_storage');
        $host = $request->getHost();
        $response = new JsonResponse();
        $form = $this->createForm(FilesType::class);
        $entity_manager = $this->getDoctrine()->getManager();
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $data_form = $form->getData();
            /** @var UploadedFile $brochureFile */
            $form_data = $form->getData();
            $file = $form_data['file'];
            $original_filename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME).'.'.$file->guessExtension();
            $server_filename = Uuid::uuid4().'.'.$file->guessExtension();
            try {
                $file->move(
                    $storage,
                    $server_filename
                );

            } catch (\Exception $e) {
                $logger->error($e);
                return $response->setData([
                    'error' => 'Error uploading file to server',
                    'status' => 'failure'
                ]);
            }
            $files = new Files($form,$server_filename,$original_filename);
            $entity_manager->persist($files);
            $entity_manager->flush();
            $short_key = self::CONTROL_BIT_FILE.KeyGenerator::makeShortKey($files->getId());
            $link_make = $this->collectLinksFiles($short_key,$host,$original_filename);
            $response->setData([
                'status' => 'success',
                'short_key' => $short_key,
                'link' => $link_make->link,
                'html_link' => $link_make->html,
                'bb_link' => $link_make->bb,
                'markdown' => $link_make->markdown,
                'qr_code' => $link_make->qr
            ]);
            if(!is_null($data_form['email'])){
                try {
                    $this->sendEmail($data_form['email'], $link_make->link, $mailer);
                }catch (\Exception $e){
                    $logger->error($e);
                }
            }
        }else{
            $response->setData([
                'error' => 'the form is not filled out correctly',
                'status' => 'failure'
            ]);
        }
        return $response;
    }
  • Вопрос задан
  • 169 просмотров
Подписаться 2 Простой 8 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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