2015-02-27 4 views
1

У меня возникла проблема с загрузкой файлов на 2.6, которая отлично работала в предыдущих версиях. Я не могу понять, в чем проблема, нет ошибки, и когда я удаляю объект post, я вижу там имя файла, но в папке с изображениями нет файла.Symfony2 - 2.6 загрузки файлов

Папка с изображениями находится в myproject/web/images.

Использование SonataAdmin для загрузки файла и снова ошибок нет.

Может кто-нибудь указать, что я делаю неправильно или что изменилось?

Редактировать: После просмотра через папки я заметил, что он создал другую папку веб-изображений в/var/www/html.

Любая идея, насколько это правильно? Моя папка проекта находится в/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

MyProject/веб/изображений записываемые? какое разрешение вы ему дали? –

+0

Да. Изменен владелец на www-data: www-данные и разрешение 775. –

+0

Можете ли вы попробовать это и сообщить нам, если его работа public function getUploadDir() { return 'images'; // удалить трейлинг-косую черту (/) } –

ответ

1

Ваш Entity путь:

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(); 
} 
+0

Спасибо, сэр за ваше терпение и помощь. Весьма признателен. –

0

Просто измените вашу сущность с этим.

Вместо

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

Заменить этот

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

Пробовал это, и он не работает. И даже попытался удержать/удалить конечную косую черту на веб-странице '' /../../../ ../ web'' и до сих пор ничего. Он по-прежнему загружается в папку «var/www/html/web/images». –

+0

, в котором вы хотите загрузить файл на картинке? правильно? –

+0

, если да, то просто создайте еще один каталог в Интернете. Загрузите и замените .... public function getUploadDir() { return 'Upload/images'; } –