none
WebシステムからExcelファイルをダウンロードできない RRS feed

  • 質問

  • .Net framework、IISで開発しているWebアプリケーションから、

    Excelファイルをダウンロードした際、

    操作選択DLG(開く、保存、名前をつけて保存)で、いづれの操作を選択しても失敗します。
    ・「開く」選択の場合:開かない
    ・「保存」、「名前をつけて保存」選択の場合:ファイルはダウンロードされるが欠損して開けない

    サーバ側のダウンロードでは成功しているようですが、

    クライアント側のダウンロードでファイルが壊れているようです。

    SPREAD画面からのファイルダウンロードですが、

    サーバ側では問題がなく、クライアント側のIE画面からダウンロードするときに壊れているようですので、

    こちらのフォーラムに質問させていただきます。

    【環境情報】

    サーバーOS:Windows2016

    クライアントOS:Windows10

    IE:11

    よろしくお願いします。

    2019年7月19日 2:02

すべての返信

  • いづれの操作

    歴史的仮名遣…

    ・「開く」選択の場合:開かない
    ・「保存」、「名前をつけて保存」選択の場合:ファイルはダウンロードされるが欠損して開けない

    http でのアクセスでしょうか、それとも https でのアクセスでしょうか。
    SSL の場合、"Pragma: no-cache"、"Cache-control:no-cache"、"Cache-control:no-store" の有無によって 正しくダウンロードされなくなる可能性があります。サーバー側の設定を確認してみてください。

    2019年7月19日 2:19
  • IE 以外の Edge, Chrome, Firefox などではどうなりますか?

    > ・「保存」、「名前をつけて保存」選択の場合:ファイルはダウンロードされるが欠損して開けない

    「欠損」というのはどのように判断したのですか?

    > サーバ側のダウンロードでは成功しているようですが、

    「サーバ側のダウンロード」とは聞きなれない言葉ですが、どういう意味ですか? 何を見て成功していると言っているのですか?

    > SPREAD画面からのファイルダウンロードですが、

    それは具体的にどのようになっているのですか?

    単に Web サーバーの仮想ディレクトリにある Excel ファイルに直リンクしているだけですか?

    それとも、ASP.NET の HTTP ハンドラで Content-Type, Content-Disposition 両方のヘッダを応答ヘッダにきちんと含めてから TransmitFile などを使って応答ストリームに書き込んでいるのですか?

    2019年7月19日 4:07
  • >歴史的仮名遣…

    誤字失礼しました。

    >SSL の場合、"Pragma: no-cache"、"Cache-control:no-cache"、"Cache-control:no-store" の有無によって 正しくダウンロードされなくなる可能性があります。サーバー側の設定を確認してみてください。

    SSLです。添付していただいたサイト確認しました。ありがとうございます。

    IE6(SP1)限定との記載がありましたが、問題が発生する環境はIE11です。

    本現象はIE11でも発生する問題なのでしょうか。

    2019年9月5日 0:08
  • >IE 以外の Edge, Chrome, Firefox などではどうなりますか?

    問題が起きている環境にはIE以外のブラウザが入っておらず確認できませんでした。(ユーザ環境のため、追加でブラウザダウンロード不可)

    >「欠損」というのはどのように判断したのですか?

    ・保存したファイルを開こうとすると以下メッセージが出力されます。
     '○○.xlsx'の一部に問題が見つかりました。可能な限り内容を回復しますか?ブックの発行元が信頼できる場合は、「はい」
     をクリックしてください。
     ↓「はい」押下後
     Excelでファイル'○○.xlsx'を開くことができません。ファイル形式またはファイル拡張子が正しくありません。
     ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください。
     と出力されます。

    >「サーバ側のダウンロード」とは聞きなれない言葉ですが、どういう意味ですか? 何を見て成功していると言っているのですか?

    WireSharkを使用して、サーバからクライアントのIEダウンロード前のExcelを取得し、開くと問題がありません。

    >> SPREAD画面からのファイルダウンロードですが、

    >それは具体的にどのようになっているのですか?

    >単に Web サーバーの仮想ディレクトリにある Excel ファイルに直リンクしているだけですか?

    上記のご認識通りです。

    2019年9月5日 0:21
  • 新しいバージョンの IE でも "BypassSSLNoCacheCheck" レジストリ値を構成していない場合、同じ問題が起きるかと思います。

    ※レジストリ値の構成に前提となる更新プログラムは不要でしょう


    Hebikuzure aka Murachi Akira

    2019年9月5日 1:05
  • Excel のバージョンにもよりますが、「VBA コードを含んだ Excel 97-2003 形式の .XLS ファイル」を、拡張子「.XLSX」にリネームして開いたような場合、『Excelでファイル'○○.xlsx'を開くことができません。ファイル形式またはファイル拡張子が正しくありません。』のエラーになりえます。

    このような拡張子の指定ミスは、ダウンロードしたファイルであるかどうかとは無関係の話となりますので、「元のファイルがそもそも壊れていた」可能性については、事前に排除しておいてください。

    話を戻して、ダウンロード時に破損するという状況についてですが:

    まず、SSL を使用しているとのことなので、HTTPS ではなく HTTP でアクセスした時に現象が変化するかを確認してみてください。それでも失敗するようであれば、先のキャッシュコントロールの件には該当しないものと思われます。SSL 通信時にのみ問題があるようなら、駄目元で、IIS 側から送出される先のキャッシュ設定を見直してみてください。

    また、「名前をつけて保存」で欠損するとのことなので、ダウンロードした .xlsx ファイルの拡張子を .zip に変更してみて、それをエクスプローラー等で開けるか確認してみてください。Office 2007 以降のドキュメントであれば、そのファイルを zip フォルダーとして開くことができるはずです。

    その結果、やはりファイルに異常がありそうなら、その欠損したファイルがどのような破損の仕方をしているのか確認してみてください。

    たとえば、0 バイトファイルになっていたとか、ダウンロードされたファイルの中身がエラーページの HTML の内容になっているといったケースがありますので、ダウンロードしたファイルをバイナリエディタで開いてみて、本来のファイルの内容と比較するのが良いでしょう。

    バイナリ比較した際に元のファイルよりサイズが短い場合、何らかの理由で通信が切断されている可能性があります。あるいはデータが全く異なっているようなら、圧縮エンコードによる転送が問題になっていたり、プロキシ等が影響を及ぼしているかもしれません。

    あるいは元のファイルよりサイズが大きくて、データは類似しているけれども、所々に「16進数文字列 + \r + \n」が混入しているような化け方をしているなら、サーバー側でチャンク転送エンコードを使用しないようにすると改善するかもしれません。

    元のファイルと、内容が 1 ビットたりとも変わらないのであれば、破損したと報告されることは無いとは思いますが、破損していないのにエラーとなる場合は、ダウンロードしたファイルのプロパティを開き、属性欄の下に、「セキュリティ:☑ブロックの解除」という項目があるかどうかを確認し、存在していた場合はチェックをオフにして開きなおしてみてください。

    それともう一つ。.xlsx ファイルをダブルクリックしてファイルを開くのではなく、Excel を単独で起動してから、メニューの[ファイル]-[開く]で開いた場合に、状況が変化するかも確認してみてください。Excel のインストール状況に問題がある場合や DDE 設定に問題がある場合、直接起動だと開けないけれども、メニューからだと開けるという状況になることが稀にあります。

    2019年9月5日 1:31
  • >> 単に Web サーバーの仮想ディレクトリにある Excel ファイルに直リンクしているだけですか?

    > 上記のご認識通りです。

    そうだとすると、ここの閲覧者や回答者のような第三者には知り得ない、質問者さんの環境固有の特殊事情とかがあるのではないかと思います。

    自分の環境で、できるだけ質問者さんの環境に近くして検証してみましたが、問題は再現できませんでした。ダウンロードした Excel ファイルは正常です。当たり前と言えば当たり前なのですが。

    どのような環境でどのようなやり方で検証したか以下に書いておきますので、質問者さんの環境ややり方と比べてみてください。違うところに問題の原因があるのではないかと思います。

    特に、下の画像にもあるように Fiddler を使って要求・応答をキャプチャして中身を調べてみることをお勧めします。他の回答者の方が指摘されている 応答ヘッダに "Cache-control:no-store" または "Cache-control:no-cache" が含まれているかもすぐ分かります。


    Windows 10 Pro 64-bit バージョン 1903 (OS ビルド 18362.329)
    IIS10 (Version 10.0.18362.1) ・・・上記 OS に付属のもの
    IE11 バージョン 11.295.18362.0、更新バージョン 11.0.140
       Windows Defender SmartScreen は無効にしています。それ以外はデフォルト

    (1) wwwroot 直下に abcd というフォルダを作り試験用の Excel ファイルを保存

    (2) SSL ということなので以下のように証明書を設定

    (3) IE11 のアドレスバーに Excel ファイルの url を入力して要求

    直リンクの a 要素をクリックしたのと同じです。ダイアログが表示されてどれを選んでも Excel ファイルは正常にダウンロードされます。以下の画像では .xlsx ファイルを要求していますが、.xls でも同じく正常にダウンロードされます。

    (4) ダウンロードした .xlsx ファイルを開いた画像

    (5) Fiddler での要求・応答は以下のようになります。

    応答ヘッダには "Cache-control:no-store" または "Cache-control:no-cache" のいずれも含まれていません。


    • 編集済み SurferOnWww 2019年9月5日 2:35 訂正&追記
    2019年9月5日 1:54