Symfony2 Filesystem - 将数据流保存在现有目录中

时间:2017-03-16 14:33:16

标签: php symfony filesystems

我有一个数据流需要保存在PDF文件中,然后将该文件存储在已存在的目录Documents/pdf中。此目录与srcappweb目录处于同一级别,并具有写入其中的所有权限。

使用我的解决方案,我总是将文件保存在web目录下。我希望文件位于Documents/pdf下。这是我的控制者:

    /**
    * @Route("/api/savePdf", name = "save_pdf")
    * @Method("POST")
    **/
    public function savePdfAction(Request $request) {

        $pdfPath = $this->get("kernel")->getRootDir() . '/../Documents/pdf/';
        $data = $request->getContent();
        $name = 'file.pdf';
        $dateNow = new \DateTime('now');
        $date = $dateNow->format('Y-m-d H-i-s');
        $fileName = $date.$name;

        try {
            $fs = new Filesystem();
            $fs->dumpFile($fileName, $data);
            move_uploaded_file($fileName, $pdfPath.$fileName);
            return new Response ("File saved correctly", 200, array('Content-Type' => 'application/json') );
        }

        catch(IOException $e) {
            return new Response ("Error!", 500, array('Content-Type' => 'application/json'));
        }

        return new Response();
     }

1 个答案:

答案 0 :(得分:1)

不要使用

move_uploaded_file

http://php.net/manual/en/function.move-uploaded-file.php

  

此函数检查以确保filename指定的文件是有效的上载文件(意味着它是通过PHP的HTTP POST上传机制上传的。)

我只是在这里猜测,但是由于你自己将内容转储到文件中,我认为它确实不能满足move_uploaded_file的使用条件。

为什么不将内容直接转储到目标文件夹中并摆脱手动移动?

$fs->dumpFile($pdfPath.$fileName, $data);

应该这样做,因为你的路径是绝对的。