通过电子邮件发送PDF下载链接Symfony 3.4

时间:2018-09-10 22:12:16

标签: php symfony

实际上,在出版物的详细信息页面中,我有一个下载按钮。 当我们单击“下载”时,将弹出一个弹出窗口,在其中输入接收用户的电子邮件,并将pdf链接发送到该电子邮件。 我设法显示了弹出窗口,但找不到发送PDF下载链接的解决方案。我不知道如何检索此链接,因为我知道在添加出版物时,我有一个文件将作为文件属性保存在数据库中,该文件属性包含扩展名为pdf的文件名。 感谢您给我搜索时提供的帮助,但是很遗憾,我没有找到所需的解决方案。 我创建了电子邮件功能,但被阻止了,我不知道以后如何处理。

1 个答案:

答案 0 :(得分:0)

我认为资源是公共的,因此不需要身份验证。应该有一条路线可以从数据库中检索内容并传递到视图

/**
 * @Rest\Get("/document/{id}/download", requirements={"id"="\d+"})
 * @param int $id  file's record ID in the database
 *
 * @return BinaryFileResponse | View
 */
public function getDocumentAction(int $id)
{
    try {

        /** @var MyFileManager $fileManager */
        $fileManager = $this->get('my_file_manager');

        //The file path should be saved in the database
        $splFileObj = new \SplFileObject($fileManager->find($id)->getPath());
        $filename = $splFileObj->getFilename();

        $response = new BinaryFileResponse($splFileObj);
        $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename);
        $response->headers->set('Content-type', 'application/pdf');
        $response->headers->set('Content-Transfer-Encoding', 'binary');
        $response->headers->set('Accept-Ranges', 'bytes');

    } catch (\InvalidArgumentException | InvalidInputException $e) {

        return $this->view($e, Response::HTTP_UNPROCESSABLE_ENTITY);
    }

    return $response;
}

将上述操作的链接作为电子邮件中的链接下载文件(通过id构造url)。显然,如果路径不是公共路径,则用户需要进行身份验证。