File upload symfony 4上传

File upload symfony 4上传,file-upload,doctrine,symfony4,File Upload,Doctrine,Symfony4,如何在symfony 4中上传文件。我已经完成了symfony文档。我不知道我在哪里错过了什么。上传文件时出错给我一些线索 参考链接: 错误: The file "" does not exist 实体 public function getBrochure() { return $this->brochure; } public function setBrochure($brochure) { $this-&

如何在symfony 4中上传文件。我已经完成了symfony文档。我不知道我在哪里错过了什么。上传文件时出错给我一些线索

参考链接:

错误:

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教程对我来说很好,所以我将尝试解释它如何,也许它将帮助你或那些仍在寻找答案的人,这篇文章有点过时了

因此,首先必须在App\service中创建FileUploader服务,以提高可重用性(第章:创建上传服务)。你基本上可以复制/粘贴他们在这里所做的,这就像一个符咒。然后,您需要在Config文件夹中打开services.yaml,并显示手册目录:

parameters:
    brochures_directory: '%kernel.project_dir%/public/uploads/brochures'
# ...
services:
    # ...

    App\Service\FileUploader:
        arguments:
            $targetDirectory: '%brochures_directory%'
现在,一切都可以正常使用您的文件上传服务了。 因此,如果您在控制器中(例如),我猜您希望在表单中使用它。因此,您只需这样做(不要忘记在控制器中使用您的服务):

有一点我忘了说。在FormType中,您需要说明手册将是一个文件类型:

$builder->add('brochure', FileType::class)
但在您的实体中,您必须指定手册存储为“字符串”:

原因是您的文件正在上载并保存在公共/上载/宣传册中。但您的数据库只记住一个字符串路径来访问它


我希望这会有帮助

我在这一行$fileName=md5(uniqid())。$file->guessExtension()中遇到错误;正在上载文件,但显示此错误。。文件“/tmp/phpoblzuA”不存在
$builder->add('brochure', FileType::class)
/**
 * @MongoDB\Field(type="string")
 */
 protected $brochure;