试图下载&使用Symfony2保存PDF文件

时间:2012-08-04 05:52:14

标签: php curl file-io symfony

我正在尝试下载&从在线资源中保存PDF文件。我已经看过文件上传的食谱章节,并尝试修改我自己使用的技术。我无法让它发挥作用。

控制器代码:

namespace Acme\DemoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

use Acme\DemoBundle\Entity\Shipment;

class WelcomeController extends Controller
{
    public function indexAction(Request $request)
    {
        echo $barcodeUrl  = "http://www.website.com/somefile.pdf";

        $Shipment = new Shipment();
        $Shipment->setBarcodeUrl($barcodeUrl);

        $em = $this->getDoctrine()->getEntityManager();
        $em->persist($Shipment);
        $em->flush(); 

        // Saving The File:
        $saveto = __DIR__.'/../../../../web/uploads/documents';
        $ch = curl_init($barcodeUrl);
        $fp = fopen($saveto,'wb');
        curl_setopt($ch, CURLOPT_FILE, $fp);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_exec($ch);
        curl_close($ch);
        fclose($fp); 

        return new Response('Created shipment and saved file");
    }

    protected function getUploadRootDir()
    {
        return __DIR__.'/../../../../web'.$this->getUploadDir();
    }

    protected function getUploadDir()
    {
        return 'uploads/documents';
    }
}

每次我运行上面的代码。它将文件保存在Web文件夹中,该文件夹具有我提到的路径作为其名称。该文件无法打开,甚至不会保存任何扩展名。

保存的文件:/../../../../web/home/webmuch/uploads在网络文件夹中。

1 个答案:

答案 0 :(得分:2)

不是Symfony2问题。您还需要将文件名传递给fopen。 所以应该是这样的:

$fp = fopen(sprintf('%s/%s.%s', $saveto, sha1($barcodeUrl), 'pdf'),'wb');

另外我注意到你有getUploadRootDir()方法,你没有使用,我假设因为它不适合你 - 原因是你错过了那里的斜线

protected function getUploadRootDir()
{
    return __DIR__.'/../../../../web/'.$this->getUploadDir();
}

最后但并非最不重要的是,您可以使用$this->container->getParameter('kernel.root_dir').'/../web'

获取网址

所以

protected function getUploadRootDir()
{
    return $this->container->getParameter('kernel.root_dir').'/../web/'.$this->getUploadDir();
}