私はこのトピックに関する質問を読んできましたし、これまで重要だった回答も見ましたが、現在この同じ問題に関連するプログラミング上の問題が発生しています。私はSymfony 3フレームワークを使用して複数のファイルをアップロードしようとしています。本当に挑戦しています。私はこれを行うための次のコードを持っています。 最初はフォームタイプで使用しています:Symfony 3複数のファイルアップロード
class ProductImageType extends AbstractType
{
/**
* Build the form
* @param None
* @return void
**/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('file', FileType::class, array('attr'=>array('class'=>'form-control'), 'multiple' => true));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'AppBundle\Entity\ProductImages',
)
);
}
public function getName()
{
return 'ProductImageType';
}
}
これは、使用してエンティティアムです:
class ProductImages
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="productSku", type="string", length=15, unique=true)
*/
private $productSku;
/**
* @var string $file
*
* @ORM\Column(name="file", type="string", length=255)
* @Assert\NotBlank(message="You must select at least one valid image file.")
*
*/
private $file;
/**
* @var int
*
* @ORM\Column(name="dateCreated", type="integer", nullable=true)
*/
private $dateCreated;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set productSku
*
* @param string $productSku
*
* @return productImages
*/
public function setProductSku($productSku)
{
$this->productSku = $productSku;
return $this;
}
/**
* Get productSku
*
* @return string
*/
public function getProductSku()
{
return $this->productSku;
}
/**
* Set images
*
* @param UploadedFile $file
*
* @return productImages
*/
public function setFile($file = null)
{
$this->file = $file;
return $this;
}
/**
* Get images
*
* @return string
*/
public function getFile()
{
return $this->file;
}
/**
* Set dateCreated
*
* @param integer $dateCreated
*
* @return productImages
*/
public function setDateCreated($dateCreated)
{
$this->dateCreated = $dateCreated;
return $this;
}
/**
* Get dateCreated
*
* @return int
*/
public function getDateCreated()
{
return $this->dateCreated;
}
}
をそして、このコントローラは、ファイルのアップロードを処理するために使用しています:
public function uploadAction(Request $request)
{
$files = $request->files->get('product_image');
$sku = $request->request->get('productSku');
$uploaded = false;
$message = null;
$count = 0;
$image_files = [];
$uploadDir = $this->getParameter('products_images_directory') . DIRECTORY_SEPARATOR . $sku . DIRECTORY_SEPARATOR;
$mimeTypes = array('image/jpeg','image/jpg','image/png','image/gif','image/bmp');
$doctrine = $this->getDoctrine()->getManager();
if(!empty($files))
{
foreach($files as $file => $v)
{
$filename[$count] = $sku . '_' . $count . '.' . $v[$count]->guessExtension();
$image_files[$count]['file'] = $filename[$count];
$image_files[$count]['file_size'] = $v[$count]->getClientSize();
Dump($image_files);die;
/**if(!is_dir($uploadDir) && !file_exists($uploadDir . $filename))
{
mkdir($uploadDir, 0775, TRUE);
if($value[$count]->move($uploadDir, $filename))
{
$productImages = new ProductImages();
$productImages->setProductSku($sku);
$productImages->setFile($filename[$i]);
$productImages->setDateCreated(strtotime(date('y-m-d h:i:s a')));
$doctrine->persist($productImages);
$doctrine->flush();
}
}
**/
$count++;
}
Dump($image_files);die('Action ended!');
if($count>1)
{
$uploaded = TRUE;
$message = "All Images have been uploaded & saved!!";
}
}
Dump($message);die;
return (new JsonResponse(
[
'uploaded'=>$uploaded,
'message'=>$message
]
));
}
私はDropzone.jsを使ってフロントエンドを処理しようとしていましたが、統合前にすべてが正常に動作することを確認しなければなりませんでした。 foreach(...)
を使用して複数の画像をアップロードしようとすると、画像の1つのみがアップロードされることがわかりました。 Dump(...)
のコンテンツの$request->request->get(...)
複数のファイルが表示されていますが、foreach(...)
は2番目または3番目のファイルではない最初の配列の内容のみを取り込みます。それを出す。誰かが6番目の目を助けてくれますか?
データを受信するにはフォームタイプを使用する必要があります。 関連するコードのみを掲載できますか?私はあなたがforeachの問題を抱えている場合、エンティティのコードを必要とせず、コメントなどのコードを必要としないことを意味します...私たちがあなたを理解し助けてくれるのは単なる難しいことです。 – goto
[Symfony2で複数ファイルをアップロードする]の可能な複製(https://stackoverflow.com/questions/6736946/multiple-file-upload-with-symfony2) – goto