私は自分のプロジェクトで画像アップロード機能を使用しています(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で同様の問題のための多くの研究をしました。