我有一个数据流需要保存在PDF
文件中,然后将该文件存储在已存在的目录Documents/pdf
中。此目录与src
,app
,web
目录处于同一级别,并具有写入其中的所有权限。
使用我的解决方案,我总是将文件保存在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 :(得分: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);
应该这样做,因为你的路径是绝对的。