symfony Vich Uploader正在上传图像,但之后找不到它们

yptwkmov  于 2023-05-29  发布在  其他
关注(0)|答案(3)|浏览(136)

使用Vich Uploader Bundle上传我的图像工作正常,它们存储在正确的目录和数据库中。但是,当尝试访问或显示它们时,找不到它们。(找不到对象异常或只是显示一个空方块。
你知道这是为什么吗
配置:

vich_uploader:
    db_driver: orm
    mappings:
       carousel:
            uri_prefix: %kernel.root_dir%/web/uploads/carousel
            upload_destination: '%kernel.root_dir%/web/uploads/carousel'
            namer: vich_uploader.namer_origname

另外,我的imageFile的setter根本不起作用。第一次上传Image时,除了imageFile之外,所有内容都已设置(updatedAt、imageSize、imageName),imageFile始终为null。
例如

Image {#1601 ▼ 
    -id: 1 
    -imageFile: null 
    -imageSize: 34703 
    -imageName: "5a7f9db650f78_EntityType.png" 
    -updatedAt: DateTime {#1599 ▼ 
    } 
  }

这是我的实体:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* Image
*
* @ORM\Table(name="app_image")
* @ORM\Entity
* @Vich\Uploadable
*/
class Image {

  /**
   * @var integer
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  /**
   * NOTE: This is not a mapped field of entity metadata, just a simple property.
   *
   * @Vich\UploadableField(mapping="carousel", fileNameProperty="imageName", size="imageSize")
   * @Assert\File()
   * @var File
   */
  private $imageFile;

  /**
    * @ORM\Column(type="integer")
    *
    * @var integer
    */
   private $imageSize;

   /**
    * @var string
    * @ORM\Column(type="string", nullable=false)
    */
   private $imageName;

   /**
   * @ORM\Column(type="datetime")
   *
   * @var \DateTime
   */
  private $updatedAt;

   public function getImageFile(){
     return $this->imageFile;
   }

    /**
    *
    * @param \Symfony\Component\HttpFoundation\File\File|\Symfony\Component\HttpFoundation\File\UploadedFile $file
    *
    * @return File
  */
    public function setImageFile(\Symfony\Component\HttpFoundation\File\File $image = null)
    {
      $this->imageFile = $image;
      if ($image instanceof File) {
        $this->updatedAt = new \DateTime();
      }
      return $this;
    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set updatedAt
     *
     * @param \DateTime $updatedAt
     *
     * @return Image
     */
    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }

    /**
     * Get updatedAt
     *
     * @return \DateTime
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }

    /**
     * Set imageSize
     *
     * @param integer $imageSize
     *
     * @return Image
     */
    public function setImageSize($imageSize)
    {
        $this->imageSize = $imageSize;

        return $this;
    }

    /**
     * Get imageSize
     *
     * @return integer
     */
    public function getImageSize()
    {
        return $this->imageSize;
    }

    /**
     * Set imageName
     *
     * @param string $imageName
     *
     * @return Image
     */
    public function setImageName($imageName)
    {
        $this->imageName = $imageName;

        return $this;
    }

    /**
     * Get imageName
     *
     * @return string
     */
    public function getImageName()
    {
        return $this->imageName;
    } 

}

我有一种感觉,这是由一个‘更深‘的问题,在我的安装或任何东西,因为一切都工作正常,直到这一点。如果我比如说

if ($image instanceof File) {
    $this->updatedAt = new \DateTime();
  }

的setter被注解掉,我得到一个updatedAt不能为null异常,所以不知何故,setter被访问,但它没有将图像设置为Uploaded File。
我是否使用了错误的目录或错误的访问权限,或者还可能是其他原因?

mznpcxlj

mznpcxlj1#

我也有同样的问题。至少在我这边,这是一个服务器配置的事情。
如果你运行syfmony的服务器,它将像charm php bin/console服务器一样工作:run
如果你运行php服务器,图片将不会显示php -S 127.0.0.1:8000-t public

yyyllmsg

yyyllmsg2#

public function configureFields(string $pageName):可迭代{ return [

TextField::new('name'),
        //TextareaField::new('imageFile')->setFormType(VichImageType::class)->hideOnIndex(),
        AssociationField::new('category'),
        BooleanField::new('status'),
        NumberField::new('price'),
        //ImageField::new('imageFile')->setBasePath($this->getParameter("app.path.product_images"))->onlyOnIndex(),

ImageField::new('imageFile ')->setFormType(VichImageType::class)->onlyOnIndex(),

ImageField::new('image',"product image")->setBasePath('/uploads/images/products/')->setUploadDir('/public/uploads/images/products/')->setUploadedFileNamePattern('[randomhash],[extension]')->setRequired(false),
     TextField::new('description'),
    ];
}
06odsfpq

06odsfpq3#

vich_uploader:db_driver:orm

mappings:
    product:
        uri_prefix: '%app.path.product_images%'
        upload_destination: '%kernel.project_dir%/uploads/images/products'
        namer: Vich\UploaderBundle\Naming\SmartUniqueNamer 
        inject_on_load:     false
        delete_on_remove : false
        delete_on_update: false

相关问题