我在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);
}
}
答案 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';
}