2017-03-16 59 views
0

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

在我的解决方案中,我始终将文件保存在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(); 
    } 
+0

没有错误?只存储在错误的路径?尝试'死(var_dump($ this-> get(“kernel”) - > getRootDir()));' – Matteo

+0

@Matteo是的,没有错误。这是结果 - >字符串(30)“/ home/user/AppBundle/app” – Dygne

回答

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); 

应该做的伎俩,因为你的道路是绝对的反正。

相关问题