IE 8 第一次不想要我的下载
IE 8 does not want my download at the first time
我有一个提供文件下载的 Zend Framework 2 应用程序。
下载操作如下所示
use Zend\Http;
[...]
public function sendDownload()
{
$file = '/tmp/foo';
if (!is_readable($file) || !is_file($file)) {
throw new \Core\Mvc\Exception\NotFoundException(sprintf("File '%s' not found.", $file));
}
$baseName = 'foo.zip';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $file);
finfo_close($finfo);
$response = new Http\Response\Stream();
$response->setStream(fopen($file, 'r'));
$response->setStatusCode(200);
$headers = new Http\Headers();
$headers->addHeaderLine('Content-Type', $mimeType);
$headers->addHeaderLine('Content-Disposition', 'attachment; filename="' . $baseName . '"');
$headers->addHeaderLine('Content-Length', filesize($file));
$response->setHeaders($headers);
return $response;
}
当我在新的 Internet Explorer 8 会话中打开下载 link 时,下载失败。
"Text: xxxx can not be downloaded. The website is not available or could not be found. Try again later".
当我尝试在同一会话中再次打开 link 时,一切正常。
这是可重现的。我重新打开 IE - 下载 - 失败 - 再次 - 有效。
在其他浏览器中它可以工作。
在XDebug中检查动作时,执行的步骤是一样的。
在 apache 访问日志中,它两次都显示代码 200 - 但大小略有不同。
以前有人见过这样的行为吗?
我想我以前见过这个,但不记得确切的原因。我认为这是某些缓存 headers 和可能的 HTTPS 的某种组合?
尝试添加:
$headers->addHeaderLine('Cache-Control', 'private, must-revalidate');
另请参阅 Content-Disposition 内联是否可以替代附件。
我有一个提供文件下载的 Zend Framework 2 应用程序。 下载操作如下所示
use Zend\Http;
[...]
public function sendDownload()
{
$file = '/tmp/foo';
if (!is_readable($file) || !is_file($file)) {
throw new \Core\Mvc\Exception\NotFoundException(sprintf("File '%s' not found.", $file));
}
$baseName = 'foo.zip';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $file);
finfo_close($finfo);
$response = new Http\Response\Stream();
$response->setStream(fopen($file, 'r'));
$response->setStatusCode(200);
$headers = new Http\Headers();
$headers->addHeaderLine('Content-Type', $mimeType);
$headers->addHeaderLine('Content-Disposition', 'attachment; filename="' . $baseName . '"');
$headers->addHeaderLine('Content-Length', filesize($file));
$response->setHeaders($headers);
return $response;
}
当我在新的 Internet Explorer 8 会话中打开下载 link 时,下载失败。
"Text: xxxx can not be downloaded. The website is not available or could not be found. Try again later".
当我尝试在同一会话中再次打开 link 时,一切正常。
这是可重现的。我重新打开 IE - 下载 - 失败 - 再次 - 有效。
在其他浏览器中它可以工作。
在XDebug中检查动作时,执行的步骤是一样的。 在 apache 访问日志中,它两次都显示代码 200 - 但大小略有不同。
以前有人见过这样的行为吗?
我想我以前见过这个,但不记得确切的原因。我认为这是某些缓存 headers 和可能的 HTTPS 的某种组合?
尝试添加:
$headers->addHeaderLine('Cache-Control', 'private, must-revalidate');
另请参阅 Content-Disposition 内联是否可以替代附件。