2016-05-21 19 views
0

私は自分のプロジェクトで画像アップロード機能を使用しています(Symfony2)。コントローラ内部:PHPファイルのアップロードで「PHP」で始まり、拡張子が.tmpのファイル名が作成されています

if ($request->isXmlHttpRequest() && $request->isMethod('POST')) { 
    $index=(int)$request->request->get('index'); 

    $image_file = $request->files->get('shop_bundle_managementbundle_posttype')['images'][$index]['file']; 

    $image= new Image(); 

    $image->setFile($image_file); 
    $image->setSubDir('hg'); 
    $image->upload(); 
    $em->persist($image); 
    $em->flush(); 
} 

私は、ファイルのアップロードを扱うクラスUploadFileMoverを使用しています。私は次のコードを書いていないが、わかっているように、元のファイル名からMD5ハッシュが作成され、ファイル名として使用される。しかし、UploadedFileのインスタンスには、 "PHP" + number.tmpのようなファイル名が含まれています。オリジナルはコンピュータファイルシステムに格納されていません。

クラスUploadFileMover {

public function moveUploadedFile(UploadedFile $file, $uploadBasePath,$relativePath) 
    { 
     $originalName = $file->getFilename(); 

     $targetFileName = $relativePath . DIRECTORY_SEPARATOR . $originalName; 

     $targetFilePath = $uploadBasePath . DIRECTORY_SEPARATOR . $targetFileName; 

     $ext = $file->getExtension(); 

     $i=1; 
     while (file_exists($targetFilePath) && md5_file($file->getPath()) != md5_file($targetFilePath)) { 
      if ($ext) { 
       $prev = $i == 1 ? "" : $i; 
       $targetFilePath = $targetFilePath . str_replace($prev . $ext, $i++ . $ext, $targetFilePath); 

      } else { 
       $targetFilePath = $targetFilePath . $i++; 
      } 
     } 

     $targetDir = $uploadBasePath . DIRECTORY_SEPARATOR . $relativePath; 

     if (!is_dir($targetDir)) { 
     $ret = mkdir($targetDir, umask(), true); 
     if (!$ret) { 
     throw new \RuntimeException("Could not create target directory to move temporary file into."); 
     } 
     } 
     $file->move($targetDir, basename($targetFilePath)); 

     return str_replace($uploadBasePath . DIRECTORY_SEPARATOR, "", $targetFilePath); 
} 

} 

画像がアップロードされると、このクラスがインスタンス化されます。つまり、uploadメソッドを持つエンティティImageがあります。エンティティクラス内部:

public function upload() 
{ 
    if (null === $this->getFile()) { 
     return; 
    } 

    $uploadFileMover = new UploadFileMover(); 
    $this->path = $uploadFileMover->moveUploadedFile($this->file, self::getUploadDir(),$this->subDir); 

    $this->file = null; 
} 

私はすべての異なる工程間でのファイル名をvar_dumpedが、それはPHP16653.tmpに変換された場合、私は把握することはできません。

APACHE関連の設定に関連付けることはできますか?あなたの助けに感謝します。私は本当に無駄にWebで同様の問題のための多くの研究をしました。

答えて

0

問題はラインによって作成されました:

$originalName = $file->getFilename(); 

使用:代わりに

$originalName = $file->getClientOriginalName(); 

関連する問題