复制的图像不保存 PHP symfony

问题描述 投票:0回答:1

我正在尝试保存从表单发送的图像的原件和副本。我使用两个变量,第一个变量存储原始变量,第二个变量用于存储副本。我尝试过克隆、复制并再次获取数据,但没有任何效果。

        $album = new Album();

        $form = $this->createForm(CreateAlbumType::class, $album);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $doctrine->getManager();

            $albumName = $album->getAlbumName();
            $coverFile = $form->get('cover')->getData();
            $coverFilePreview = clone $coverFile;

上面是处理表单数据的控制器的启动部分



            $currentYear = date('Y');
            $currentMonth = date('m');
            $currentMonthPreview = $currentMonth . '_preview';
            $uploadDirectoryMonth = 'images/' . $currentYear . '/' . $currentMonth; 
            $uploadDirectoryPreview = 'images/' . $currentYear . '/' . $currentMonthPreview;

            if (!is_dir($uploadDirectoryMonth)) {
                mkdir($uploadDirectoryMonth, 0755, true);
            }

            if (!is_dir($uploadDirectoryPreview)) {
                mkdir($uploadDirectoryPreview, 0755, true);
            }



            $newFilename = $imageNumber . '.' . $coverFile->guessExtension();
            $newFilenamePreview = $imageNumber . '_preview.' . $coverFilePreview->guessExtension();
            $coverFile->move($uploadDirectoryMonth, $newFilename);
            $coverFilePreview->move($uploadDirectoryPreview, $newFilenamePreview);


            $album->setAlbumName($albumName);
            $album->setCoverPath($uploadDirectoryMonth . '/' . $newFilename);
            $album->setCoverPathPreview($uploadDirectoryPreview . '/' . $newFilenamePreview);


            $entityManager->persist($album);
            $entityManager->flush();

上面这是控制器的结束部分,我剪掉了一些小部分代码,因为我认为问题出在代码的这些部分

我尝试过通过第二个变量复制原始变量,我尝试过克隆并再次获取数据。这些是对我来说唯一有意义的选择。这样做的目的是让 coverFilePreview 具有相同的图像,但独立并且能够修改它,例如更改大小或名称,将其保存在不同的目录中,而不影响原始图像

php mysql symfony controller
1个回答
0
投票

您不应直接克隆代表上传文件的

$coverFile
对象,而应使用相同的文件路径创建
UploadedFile
的新实例。

if ($form->isSubmitted() && $form->isValid()) {
    $entityManager = $doctrine->getManager();

    $albumName = $album->getAlbumName();
    $coverFile = $form->get('cover')->getData();
    // Remove:  $coverFilePreview = clone $coverFile;

    // Create a copy of the uploaded file
    $coverFilePreview = new UploadedFile(
        $coverFile->getPathname(),
        $coverFile->getClientOriginalName(),
        $coverFile->getClientMimeType(),
        $coverFile->getSize(),
        true, // replace
        true  // autoDelete
    );

    // Rest of your code...
}
© www.soinside.com 2019 - 2024. All rights reserved.