0

私は現在、クライアント用のWebアプリケーションを構築しています。そして、私はオリジナルのIE8でxlsxファイルをダウンロードすることができません。IE9のIE8互換モードで動作しますが。

私はsymfony1.4、php5.2.6を使用しています。xslxファイルは有効です。

私のコード:

$this->getResponse()->clearHttpHeaders();
    $this->getResponse()->setHttpHeader('Pragma: public'); 
    $this->getResponse()->setContentType('application/force-download');
    $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="Export_Excel.xlsx"');
    $this->getResponse()->setHttpHeader('Content-Transfer-Encoding', 'binary');
    $this->getResponse()->setHttpHeader('Connection', 'close');
    $this->getResponse()->setContent($fileData);
    $this->getResponse()->sendHttpHeaders();
    $this->getResponse()->send();

IE 8は、Webサイトが見つからないか応答しないため、ダウンロードできず、後で試すと言っています。同じURLで空白のページを表示できるため、これはURLの問題ではありません。

さらに、このコード

        session_write_close();
        $this->getResponse()->clearHttpHeaders();
        $this->getResponse()->setHttpHeader('Pragma: public'); 
        $this->getResponse()->setContentType('application/force-download');
        $this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="Export_Excel.xlsx"');
        $this->getResponse()->setHttpHeader('Content-Transfer-Encoding', 'binary');
        $this->getResponse()->setHttpHeader('Connection', 'close');

      @ob_end_clean();
    flush();


    @readfile(sfConfig::get('sf_web_dir').'/'.$filename.'.xlsx');
  throw new sfStopException();

次に、xslxファイルがzipファイルとしてダウンロードされます。session_write_close();に注意してください。上記のコードはそれなしでは機能しなかったからです。

何か案は ?

ファイルをxslxファイルとしてダウンロードできるようにしたいと思います。(名前を変更する必要はありません)。コードの最初の束は、chrome、firefox、IE 9、IE9 compat IE 8、IE9compatIE7で動作します。しかし、IE8ではありません。

更新2:

したがって、問題は実際にはダウンロード部分にあります。上司から、xlsxをcsvに一時的に置き換えるように言われましたが、ファイルをダウンロードするのとまったく同じ問題があります。

では、ファイルのダウンロードをIE8で機能させるためのアイデアはありますか?

4

1 に答える 1

0

解決策を見つけました。これは理解するのは非常に簡単ですが、見つけるのは非常に困難です。

私のダウンロードは、作業中のpdfエクスポートのように、window.openでjavascriptによって呼び出されました。ただし、新しいウィンドウの場合、IE8 は強制ダウンロードを無視して表示しようとします。したがって、pdfで動作します。しかし、表示できない拡張子でクラッシュします。

したがって、解決策は、私の場合のように、動的な引数を与える必要がある場合は、単純なリンクまたは window.location.href = を使用することです。

于 2012-11-12T14:49:11.287 に答える