2012-04-16 2 views
0

파일 이름을 지정하려면 다음과 같이 지정합니다. Username-OriginalFileName. 심포니 요리 책 here파일의 사용자 이름이 포함 된 파일 업로드에 파일 이름 생성

/** 
    * @Assert\File(maxSize="6000000") 
    */ 
public $FILE_file; 

public $path; 

    public function getPath() 
    { 
     return $this->path; 
    } 
    public function setPath($path) 
    { 
     return $this->path=$path; 
    } 

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

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

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

    protected function getUploadDir() 
    { 

     return 'uploads/files'; 
    } 


    /** 
    * @ORM\PrePersist() 
    * @ORM\PreUpdate() 
    */ 

    public function preUpload() 
    { 
     if (null !== $this->FILE_file) { 
         $username=$this->get('security.context')->getToken()->getUser()->getUsername(); 
      $this->path = $username.'-'.$this->path; 
     } 
    } 

    /** 
    * @ORM\PostPersist() 
    * @ORM\PostUpdate() 
    */ 

     public function upload() 
    { 
     // the file property can be empty if the field is not required 
     if (null === $this->FILE_file) { 
      return; 
     } 

     $this->FILE_file->move($this->getUploadRootDir(), $this->FILE_file->getClientOriginalName()); 

     $this->path = $this->FILE_file->getClientOriginalName(); 

     $this->FILE_file = null; 
    } 

에 설명 된대로 내 최초의 솔루션 내 파일 엔티티에 preUpload 콜백을 사용하는 것이었다 그러나 내가 엔티티에서 용기를 얻을 수없는 것 같다. 그래서 난 내 파일 컨트롤러에서이 작업을 수행하려고했습니다 :

      $filename=$username.'-'.$file->path; 

          $file->setPath($filename);  
          $file->setFILEFormat($ext); 
          ... 

          $em1->persist($file); 
          $em1->flush(); 
          $file->upload(); 
          $content=$file->getContent(); 

의 getContent 파일을 열고 문자열 배열의 내용을 저장하는 기능입니다. 어떤 이유로 파일은 $ filename이 아닌 업로드 양식의 OriginalName과 함께 유지되고 업로드됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2

파일과 사용자 사이에 어떤 관련이 있습니까?

파일 엔티티 :

/** 
* 
* @ORM/ManyToOne(targetEntity="User" …) 
*/ 
private $user; 

public function preUpload() 
{ 
    if (null !== $this->FILE_file) { 
     $this->path = $this->user->getUsername().'-'.$this->path; 
    } 
} 
+0

어떻게 든 preUpload 콜백이 작동하지 않았다 들어 다른 당신이 뭔가를 할 수 있습니다. 나는 이것을 업로드 기능에 추가했고 작동한다. 감사. – Wissem