2016-11-17 11 views
-4

サーバー上で実行され、zipファイルを正しく生成してサーバーに格納するコードセットがあります。私はそのファイルの場所を物理的なパスとして持っています。応答でファイルを送信できません

私が試みたことは、クライアントへの応答を使用してそのファイルをダウンロードすることはできませんでした。

試み1:

System.IO.FileInfo fi = new System.IO.FileInfo(zipFilePath); 

//setup HTML Download of provided Zip. 
//application/zip 
Response.ClearContent(); 
Response.Clear(); 
Response.ClearHeaders(); 
Response.Buffer = true; 
Response.ContentType = "application/zip"; 
Response.AddHeader("Content-Disposition", 
"attachment; filename=\"" + System.IO.Path.GetFileName(zipFilePath) + "\";"); 
Response.AddHeader("Content-Length", fi.Length.ToString()); 

Response.TransmitFile(zipFilePath); 

Response.Flush(); 
Response.End(); 

ません結果。コードはエラーなしで実行されますが、クライアントへのダウンロードはありません。

試み2:

//Almost the same as attempt 1, but with WriteFile instead 
Response.WriteFile(zipFilePath); 

Noの結果、試行と同じ1

試み3:

//Note: Same Header Section as Attempts 1 and 2 
System.IO.BinaryReader reader = new System.IO.BinaryReader(new System.IO.FileStream(zipFilePath, System.IO.FileMode.Open)); 

int CHUNK = 1024; 
List<byte> FileArray = new List<byte>(); 
while (reader.BaseStream.Position < reader.BaseStream.Length) 
    FileArray.AddRange(reader.ReadBytes(CHUNK)); 

byte[] bArray = FileArray.ToArray(); 
reader.Close(); 

Response.OutputStream.Write(bArray, 0, bArray.Length); 

Response.Flush(); 
Response.End(); 

Noの結果、以前の試みと同じ

試み4:

//Identical to Attempt 3, but using BinaryWrite 
Response.BinaryWrite(bArray); 

結果はありません。以前の試みと同じです。

質問

これらのコードブロックのひとつひとつは、エラーなしで実行しますが、ファイルの保存ダイアログが表示されません。私は何も得られない。私は私の人生のために私が逃しているかもしれないものを理解することができません。

  • ファイルパスが正しい
  • コードがないクライアント上で、サーバー上で実行されていると確認された、私はこのような理由
は「WebClient.Download」メソッドを使用することはできません

誰かが何か提案があれば、私はすべて耳にします。このファイルをクライアントにダウンロードさせる方法はわかりません。

+0

を追加することにより、ページのページのロードに固定しました。あなたのコメントのように 'application/zip'にする必要があります。 – itsme86

+0

ブラウザでネットワークトラフィックを調べることを試みましたか?あなたはfiddlerのようなものを使うこともできますし、ブラウザの診断(IEのF12、FirefoxのCTRL + SHIFT + iなど)のNetworkタブを見ることもできます – itsme86

+0

mime/content typeのスペースは問題ありません最初はスペースが必要ありません)。 – Nikkster

答えて

0

これは、UpdatePanelsとPOSTレスポンスの間の問題を引き起こすAjax関連のエラーであることが判明しました。

問題は、私はあなたがあなたのMIMEタイプにスペースを持っていないと思うコール

ScriptManager.GetCurrent(Page).RegisterPostBackControl(btnGenerate); 
0

私はあなたのコードをテストし(試行1)、テストファイルでうまく動作しています。ファイルのパスが間違っている場合は、System.IO.FileNotFoundExceptionと表示されるため、おそらく問題はありません。

これに対処するためのいくつかの方法:

  • は、例えば、Webページでの検査Chromeを試してみてください右クリック をしてinspectを選択してください。その後、Networkタブをクリックし、 ページ(ファイルを取得するはずです)を更新してください。そのリクエストの応答 ヘッダーを確認してください。それは何ですか?
  • コンテンツタイプをapplication/octet-streamに設定してみてください
  • Visual Studioでデバッガを使用してステップスルーしてください。
関連する問題