Symfony4: изображение не может быть сохранено

Я обновился с Symfony 3.4 до 4.0 и проверил работу. Функция сохранения изображения сообщает «Завершено», но изображение не сохраняется. Поскольку место сохранения было установлено на web / uploads, в Image.php я изменил путь к каталогу изображений с web на public, но он не изменился. Что еще мне нужно изменить?

ImageController.php

    public function saveAction(Request $request)
    {
        $response = new Response();
        $imageService = $this->get("admin.imageService");
        if ($token === $imageService->getImageToken($staffId, $uniq)) {
            try {
                $imageService->saveImage($image);
                // Normal termination parameters #This is required for onComplete to fire on Mac OSX
                $msg = $this->container->getParameter('uploadify_success');
            } catch (\Exception $e) {
                $msg = $e->getMessage();
                $response->setStatusCode(400);
            }
        } else {
            $msg = 'Access is illegal.';
            $response->setStatusCode(400);
        }
        $response->send();

ImageService.php

    public function saveImage(Image $image)
    {

        // Set the extension (already set when saving from an email attachment)
        $ext = $image->getImageExtension();
        if (!$ext && $image->getFileUpload()) {
            $ext = $image->getFileUpload()->guessExtension();
            $image->setImageExtension($ext);
        }

        // save
        $this->entityManager->persist($image);
        $this->entityManager->flush();
    }

Image.php

    private function getUploadRootDir()
    {
        // Absolute path to the location to save the uploaded file
        return __DIR__.'/../../../../../../public/'.$this->getUploadDir();
    }

    /**
     * Returns the image directory name
     *
     * @return string
     */
    private function getUploadDir()
    {
        return 'uploads';
    }

Постскриптум

index.html.twig

{% block javascripts %}
    {{ parent() }}
    <script src="{{ asset('uploadifive/jquery.uploadifive.js') }}"></script>
    <script src="{{ asset('js/image.five.js') }}"></script>
{% endblock %}

{% block stylesheets %}
    {{ parent() }}
    <link rel="stylesheet" href="{{ asset('uploadifive/uploadifive.css') }}">
{% endblock %}

{# contentBody #}
{% block contentBody %}
    {{ render(controller('AppBundle:Hq/Image:manager')) }}
{% endblock %}

manager.html.twig

        <div class="tabcontent">
            <div class="operations">
                {{ form_start(form, {"attr": {"id": "uploadForm"}}) }}
                    {{ form_widget(form.fileUpload) }}
                    {{ form_rest(form) }}
                {{ form_end(form) }}
                &nbsp;
            </div>
            <div id="fileQueue"></div>
        </div>

Может быть, это вещь Symfony, но где код, который на самом деле загружает файл? Вы тоже меняли каталог назначения?   —  person benq_0511    schedule 26.02.2021

@AkenRoberts Я использую uploadifive, но кажется, что место сохранения зависит от настроек Symfony.   —  person benq_0511    schedule 26.02.2021

См. также:  Ошибка npm install bcrypt с ошибкой: не удается найти модуль 'nan'

Можете ли вы проверить свой шаблон веточки / визуализированный HTML-код, который установлен enctype="application/x-www-form-urlencoded"?   —  person benq_0511    schedule 26.02.2021

@dbrumann Нет. Не было настройки enctype. На всякий случай добавил файл веточки, пожалуйста, проверьте его.   —  person benq_0511    schedule 26.02.2021

Чтобы FileUpload работал, вы должны установить enctype в своей форме, например добавив его в {'attr': { 'enctype': 'multipart/form-data'}} (я думаю). Вы можете увидеть это в этом бесплатном видео с SymfonyCasts: symfonycasts.com / screencast / symfony-uploads /   —  person benq_0511    schedule 26.02.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. benq_0511

    Вы должны использовать projectDir вместо своего getUploadRootDir() с опасными ../../

    Взгляните на этот пост Symfony 4, получите корневой путь проекта из пользовательского класса (не класса контроллера) для получения подробных инструкций.

    Новое в Symfony 3.3: https://symfony.com/blog/new-in-symfony-3-3-a-simpler-way-to-get-the-project-root-directory

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: