我尝试从 Controller 下载文件(此处为附件)

这是我的代码:

/**
 * @param Request    $request
 * @param Attachment $attachment
 *
 * @Route("/message/{thread_id}/download/{attachment_id}", name="faq_download_attachment")
 * @ParamConverter("attachment", options={"id" = "attachment_id"})
 *
 * @return BinaryFileResponse
 *
 * @throws \Symfony\Component\Filesystem\Exception\FileNotFoundException
 */

public function downloadFiletAction(Request $request, Attachment $attachment)
{
    $mountManager = $this->get('oneup_flysystem.mount_manager');
    $fileSystem = $mountManager->getFilesystem('faq');
    return new BinaryFileResponse($fileSystem->getAdapter()->getPathPrefix() . $attachment->getFilename());
}

这段代码:
$fileSystem->getAdapter()->getPathPrefix() . $attachment->getFilename()

返回绝对路径(正确)

最后,我得到这个错误=>
无法在BinaryFileResponse实例上设置内容。

看来,当我实例化BinaryFileResponse时,symfony会将其内容设置为NULL(这是我想要的),但是当我放置return语句时。我的内容被无效字符串替换,这是一件坏事,因为BinaryFileResponse的以下函数引发异常。
public function setContent($content)
{
    if (null !== $content) {
        throw new \LogicException('The content cannot be set on a BinaryFileResponse instance.');
    }
}

此外,如果我删除setContent方法中的if语句,则所有内容都将像一个 super 按钮一样工作。 (但这不是最好的选择)

感谢您的帮助

最佳答案

我已经测试了您的代码,并且对我有用。尝试通过以下方式替换return语句:

return BinaryFileResponse::create($fileSystem->getAdapter()->getPathPrefix() . $attachment->getFilename());

10-07 17:14