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

时间:2018-02-13 15:59:05

标签: symfony upload vichuploaderbundle image-file

使用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根本不工作。第一次上传图像时,除了imageFile之外,一切都已设置(updatedAt,imageSize,imageName),它始终为null ..

e.g。

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

这是我的实体:

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但它没有将图像设置为上传的文件。 我使用的是错误的目录或错误的访问权限,还是它还有什么用呢?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我有同样的问题。至少在我这方面,这是服务器配置的事情。

如果运行syfmony的服务器,它将像魅力php bin /控制台服务器一样运行:运行

如果运行php服务器,则不会显示图像php -S 127.0.0.1:8000 -t public