[英]Nette Redirect and Send file in the same form
我在发送文件并同时重定向到新页面时遇到问题,现在它只有两种工作方式:
1.通过sendResponse发送文件
2.重定向到新页面
表单成功后我的代码:
$this->sendResponse(new FileResponse($file));
$this->redirect('this', ['Id' => NULL, 'addAge' => NULL]);
我想知道如何发送文件并重定向到新页面,我试图创建一个指向下载演示者的链接,但它仍然不起作用。
您可以使用header()
发送 HTTP 位置 header
header('Location'.'new url');
使用这些方法,您无法在发送响应后重定向,因为发送响应将终止 HTTP 连接:
并且您无法在重定向后发送响应,因为这也会终止连接:
https://github.com/nette/application/blob/7177fcdb5edbf9fc90c78dc9763d6bd2cc1cc452/src/Application/UI/Component.php#L286 https://github.com/nette/application/blob/7177fcdb5edbf9fc90c78dc9763d6bd2cc1cc452/src/Application/UI/Presenter .php#L660
更糟糕的是,下载通常( 在这种情况下也是如此)使用Content-Disposition
HTTP header 完成,它告诉浏览器在提供的文件名下下载 Z293C9EA246FF9985DC6F62A650F78986 响应的正文。
另一方面,重定向是使用Location
header完成的( 这里也是),它告诉浏览器它应该在不同的位置试试运气,这样它甚至不会检查正文。
这两个用例本质上是冲突的。
我建议在目标页面上添加<meta http-equiv="refresh">
以重定向到将发送文件响应的路由。 这应该使用户留在您要重定向到的目标页面上,同时提示他们下载附件。 许多下载网站都是这样做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.