Symfony2 - 2.6文件上传

时间:2015-02-27 07:59:50

标签: symfony file-upload

我在2.6上遇到文件上传问题,这在以前的版本上运行良好。我无法弄清问题是什么,没有错误,当我转储post对象时,我看到了一个文件名,但images文件夹中没有文件。

我的图片文件夹位于myproject / web / images。

使用SonataAdmin上传文件,再没有错误。

有人可以指出我做错了什么或改变了什么?

编辑:仔细浏览文件夹后,我发现它在/ var / www / html中创建了另一个web / images文件夹。

知道这有多正确吗?我的项目文件夹位于/ var / www / html / myproject中。

尝试再添加2个/../../但收到错误:Unable to create the "/var/www/html/myproject/src/AppBundle/Entity/../../../../../../web/images/" directory。并删除2 /../../但仍然没有。

使用以下内容在树枝中调用文件:

{% for photo in photos %}
    <a href="{{ asset(['images/', photo.image]|join) }}">
        <img src="{{ asset(['images/', photo.image]|join) }}" width="400" height="600" alt=""/>
    </a>
{% endfor %}

发布实体

/**
 * @var string
 *
 * @ORM\Column(name="file", type="string", length=255)
 */
private $image;

public $file;


/**
 * Set image
 *
 * @param string $image
 * @return Post
 */
public function setImage($image)
{
    $this->image = $image;

    return $this;
}

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

public function getUploadDir()
{
    return 'images/';
}

public function getUploadRootDir()
{
    return __DIR__ . '/../../../../web/' . $this->getUploadDir();
}

public function getWebPath()
{
    return null === $this->image ? null : $this->getUploadDir() . '/' . $this->image;
}

public function getAbsolutePath()
{
    return null === $this->image ? null : $this->getUploadRootDir() . '/' . $this->image;
}

/**
 * @ORM\PrePersist()
 * @ORM\PreUpdate()
 */
public function preUpload()
{
    if (null !== $this->file) {
        $this->image = uniqid() . '.' . $this->file->guessExtension();
    }
}

/**
 * @ORM\PostPersist()
 * @ORM\PostUpdate()
 */
public function upload()
{
    if (null === $this->file) {
        return;
    }

    // If there is an error when moving the file, an exception will
    // be automatically thrown by move(). This will properly prevent
    // the entity from being persisted to the database on error
    $this->file->move($this->getUploadRootDir(), $this->image);

    $this->file = null;
}

/**
 * @ORM\PostRemove()
 */
public function removeUpload()
{
    if ($file = $this->getAbsolutePath()) {
        unlink($file);
    }
}

2 个答案:

答案 0 :(得分:1)

您的实体路径是:

var/www/html/myproject/src/AppBundle/Entity/Post.php

和您的getUploadRootDir方法:

public function getUploadRootDir()
{
    return __DIR__ . '/../../../../web/' . $this->getUploadDir();
}

这将返回四次,因为有4个(../)将您带到源目录之外。

使用此方法解决此错误:

public function getUploadRootDir()
{
    return __DIR__ . '/../../../web/' . $this->getUploadDir(); 
}

答案 1 :(得分:0)

只需用此更改您的实体。

而不是

public function getUploadDir()
{
    return 'images/';
}

替换此

public function getUploadDir()
{
    return '/images';
}