繁体   English   中英

Nette 以相同的形式重定向和发送文件

[英]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/Presenter.php#L613

并且您无法在重定向后发送响应,因为这也会终止连接:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM