1

オンライン リソースから 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/uploadsWeb フォルダー内。

4

1 に答える 1

2

Symfony2 の問題ではありません。ファイル名も fopen に渡す必要があります。したがって、次のようになります。

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

また、使用していないメソッドがあることに気付きgetUploadRootDir()ました。それが機能しなかったためだと思います-その理由は、そこにスラッシュがないためです

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

最後になりましたが、次の方法で Web ロケーションを取得できます。$this->container->getParameter('kernel.root_dir').'/../web'

それで

protected function getUploadRootDir()
{
    return $this->container->getParameter('kernel.root_dir').'/../web/'.$this->getUploadDir();
}
于 2012-08-04T07:26:03.587 に答える