如何上传在symfony中4.I文件与symfony的文件来完成。我不知道我错过了一些东西。它会抛出错误,而上传文件给我一些线索
REFERED LINK:
https://symfony.com/doc/current/controller/upload_file.html
错误:
The file "" does not exist
实体
public function getBrochure()
{
return $this->brochure;
}
public function setBrochure($brochure)
{
$this->brochure = $brochure;
return $this;
}
文件上传监听器
class FileUploader
{
private $targetDirectory;
public function __construct($targetDirectory)
{
$this->targetDirectory = $targetDirectory;
}
public function upload(UploadedFile $file)
{
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$file->move($this->getTargetDirectory(), $fileName);
return $fileName;
}
public function getTargetDirectory()
{
return $this->targetDirectory;
}
}
这Symfony的教程工作正常,我,所以我会尽力解释如何,或许它会帮助你还是人还在寻找一个答案,这个职位变得有点老了。
所以,首先你要更好的可重用性(章:创建上传服务)创建应用程序\服务的FileUploader服务。基本上你可以复制/粘贴什么,他们在这里已经做了,它就像一个魅力。然后,你需要在配置文件夹,并明确您的小册子目录打开你的services.yaml:
parameters:
brochures_directory: '%kernel.project_dir%/public/uploads/brochures'
# ...
services:
# ...
App\Service\FileUploader:
arguments:
$targetDirectory: '%brochures_directory%'
现在一切都正常就可以使用您的FileUploader服务。所以,如果你在你的控制器(例如),我想你想的形式使用它。这样,你就必须做到这一点(不要忘记使用您的服务在您的控制器):
public function myController(FileUploader $fileUploader)
{
// Create your form and handle it
if ($form isValid() && &form isSubmitted()) {
$file = $myEntity->getBrochure();
$fileName = $this->fileUploader->upload($file);
$myEntity->setBrochure($fileName);
// Form validation and redirection
}
// Render your template
}
其中重要的一点我忘了说。在你的FormType,你需要说,这本小册子将是一个文件类型:
$builder->add('brochure', FileType::class)
但是,在你的实体,您必须指定您的小册子存储为“串”:
/**
* @MongoDB\Field(type="string")
*/
protected $brochure;
原因是你的文件被越来越上传并保存在公共/上传/小册子。但是,你的数据库只记住一个字符串路径去实现它。
我希望这个能帮上忙!