4

这是昨晚工作的,但我一定是不小心改变了一些东西,因为现在不是。

从这些标题中应该清楚我想要做的事情:

Content-Disposition: attachment;filename=english_customizable.xml
Location: http://tortoisewrath.com/files/2.xml

但是,当发送此标头时,该Content-Disposition部分在重定向后不起作用。

...为什么?

4

1 回答 1

2

你想要做的是不建议检查这个问题;标题位置 + 内容配置

Content-Disposition + Location 标头

但是您可以做到,要使其正常工作,您必须在发送之前缓冲整个响应。您可以通过输出缓冲来做到这一点

否则浏览器可能会Location在文件下载之前解释标题。无论哪种方式都是粗略的,所以你不应该这样做。

请注意,强制“另存为”使用Content-Disposition: attachment;将确保客户端不会去/导航任何地方,因此下面的方法在任何情况下都应该没问题。

在php中流式传输文件

引用一个聪明的人的话:

// To use header() with 'content-type', why don't you use mime_content_type() function rather than checking the type on the basis of extension? 
// Example code: 

<?php 
$file="test.docx"; 
header("Pragma: public"); 
header('Content-disposition: attachment; filename='.$file); 
header("Content-type: ".mime_content_type($file)); 
header('Content-Encoding: identity'); 
ob_clean(); 
flush(); 
readfile($file); 
?> 

// Use $file to map to whichever type of file. 
// Note: the mime types should already be defined in apache settings

来源:http ://www.php.net/manual/en/function.header.php#107581

请注意,使用的原始答案Content-Transfer-Encoding实际上并不存在于 HTTP 中。该来源下方的评论解释了它:http ://www.php.net/manual/en/function.header.php#107044

于 2012-06-22T20:12:15.383 回答