- - PR -
圧縮ファイルのダウンロードについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-01 10:55
いつもお世話になっています。
環境:Visual Studio 2005、 ASP.NET C#、 .NET Framework 2.0 Webフォームのボタンを押された時に、データベースから取得したテーブルの内容を 動的に圧縮し、ブラウザーの「このファイルを開くか、または保存しますか?」 ダイアログで保存する処理を考えています。 http://www.atmarkit.co.jp/fdotnet/dotnettips/361aspzipfile/aspzipfile.html 上記のサイトを参考にしてみたんですが、Zipファイルをサーバーに保存する処理に なっていたので、保存しないでブラウザーの「このファイルを開くか、または保存しますか?」 ダイアログで保存するやりかた探したのですが見当たらないのでご教授御願い致します。 -------------------------------------------------------------------------------------------- Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment; filename=test.zip"); 参考にしたサイトにはこの記述がなかったので追加してダイアログは表示され、 ファイルは保存できるのですが中身がない圧縮ファイルができます。 多分、下記の処理★の箇所が関係すると思うのですが、JavaではZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); としてダウンロードができたので、J#でも同じ様な事は可能なのでしょうか? ★ZipOutputStream zipStream = new ZipOutputStream(new FileOutputStream(Server.MapPath("data/test.zip"))); -------------------------------------------------------------------------------------------- // 指定されたファイルへの圧縮出力ストリームを生成 ZipOutputStream zipStream = new ZipOutputStream(new FileOutputStream(Server.MapPath("data/test.zip"))); ByteArrayOutputStream bArray = new ByteArrayOutputStream(); OutputStreamWriter oStream = new OutputStreamWriter(bArray, "SJIS"); //ヘッダ oStream.write("test1"); oStream.write(","); oStream.write("test2"); oStream.write(","); oStream.write("test3"); oStream.write("\\r\\n"); //データ oStream.write("11111" + ","); oStream.write("22222" + ","); oStream.write("33333"); oStream.close(); ZipEntry zEntry = new ZipEntry("test1.csv"); zEntry.setMethod(ZipOutputStream.DEFLATED); zipStream.putNextEntry(zEntry); zipStream.write(bArray.toByteArray(), 0, bArray.toByteArray().Length); zipStream.closeEntry(); zipStream.flush(); zipStream.close(); | ||||
|
投稿日時: 2007-11-01 11:51
Response.BinaryWrite()で中身出力していますでしょうか? HttpResponse.BinaryWrite メソッド http://msdn2.microsoft.com/ja-jp/library/system.web.httpresponse.binarywrite(VS.80).aspx | ||||
|
投稿日時: 2007-11-01 12:55
返信ありがとうございます。
記述したソースの通りなんで、Response.BinaryWrite()は使用していません。 記述した処理を実行するとdataフォルダには中身がある圧縮ファイルはできています。 ファイルを指定のフォルダに自動的に落とさず、ブラウザーのダイアログで 保存先を指定して保存する感じにしたいんです。Javaではできたんですけど J#でのサンプルがないので皆さんどうやっているのでしょうか?? | ||||
|
投稿日時: 2007-11-01 13:09
どのストリームからどのストリームにデータを転送しようとしていますか?
ファイル→Zip→Response へと転送しないといけませんよね。 _________________ かるあ のメモ と スニペット | ||||
|
投稿日時: 2007-11-01 14:12
返信有難うございます。
Zip→Responseに転送するしかたが分からないのです。 | ||||
|
投稿日時: 2007-11-01 14:21
先ほども書きましたようにbyte[]にしてBinaryWriteで出力するか、 HttpResponse.OutputStream プロパティ http://msdn2.microsoft.com/ja-jp/library/system.web.httpresponse.outputstream(VS.80).aspx に出力してみてはどうでしょうか。 | ||||
|
投稿日時: 2007-11-01 15:28
MSDNを見てもBinaryWrite or OutputStreamを記述した処理に どうやって入れ込むかが分かりません。 処理自体を変えないと難しいのでしょうか? | ||||
|
投稿日時: 2007-11-01 16:55
まず最初の例では
Inストリーム→Zipストリーム→Outストリーム になっているわけですよね。 これがそれぞれどの部分かわかりますか? それがわかれば、あとはストリームを切り替えるだけだと思うのですが。 最初にボルビさん自身がおっしゃっていますが、注目点はいいとおもいますよ。 #っていうか、こたえでてるんじゃ。。。 _________________ かるあ のメモ と スニペット |