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