- - PR -
圧縮ファイルのダウンロードについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-01 17:19
大体こんな流れでどうでしょうか。 別のByteArrayOutputStreamのインスタンスを作成し、 それを ZipOutputStreamのコンストラクタの引数で渡して ZipOutputStreamインスタンスを作成して、それにデータを書き込み、 ByteArrayOutputStreamのtoByteArray()で sbyte[]を得て sbyte[] →byte[]は Buffer.BlockCopyメソッド http://msdn2.microsoft.com/ja-jp/library/system.buffer.blockcopy(VS.80).aspx でBuffer.BlockCopy(sbyteArray,0,byteArray,0,sbyteArray.Length); BinaryWrite()でbyte[] を出力するのでどうでしょうか。 一度サーバにzipファイルを作成してしまうのなら HttpResponse.WriteFile メソッド http://msdn2.microsoft.com/ja-jp/library/dyfzssz9(VS.80).aspx も使えると思います。 | ||||||||
|
投稿日時: 2007-11-01 18:22
あっそうか、J# だから、
とは書けないのか、すみませんでした。 IIJIMAS さんの方法のように一度バッファに格納して引き渡してあげないとだめですね。 _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-11-01 19:14
Buffer.BlockCopyメソッドを使うには何かusingを追加する必要があるのでしょうか? 表示されないので・・・ それとBuffer.BlockCopyメソッド使ってsbyte[] →byte[]に 変換するという事で宜しいんですよね? | ||||||||
|
投稿日時: 2007-11-01 19:56
すいません、System.Buffer.BlockCopyで表示されました。 | ||||||||
|
投稿日時: 2007-11-01 20:33
処理を変えてみて試したんですが、test.zipを保存して開こうとすると
「圧縮しますか」と表示され、中身がないzipファイルができてしまいます。 もう少しだと思うんですけど、悩みまくりです〜ご教授を・・・・ Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment; filename=\\"" + "test.zip\\""); ByteArrayOutputStream bArray1 = new ByteArrayOutputStream(); ZipOutputStream zipStream = new ZipOutputStream(bArray1); 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("test.csv"); zEntry.setMethod(ZipOutputStream.DEFLATED); zipStream.putNextEntry(zEntry); zipStream.write(bArray.toByteArray(), 0, bArray.toByteArray().Length); zipStream.closeEntry(); zipStream.flush(); zipStream.close(); byte[] bs = new byte[bArray1.toByteArray().Length]; sbyte[] sbs = new sbyte[bArray.toByteArray().Length]; System.Buffer.BlockCopy(sbs, 0, bs, 0, sbs.Length); Response.BinaryWrite(bs); | ||||||||
|
投稿日時: 2008-01-22 19:43
IIJIMAS様
かるあ様 ご回答ありがとう御座いました。 お礼が遅くなってすいませんでした、こんなことに今日まで悩みまくってたんで・・・。 これが正解か分からないですけど、出力できたんで良しとします。 Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + "test.zip\""); Response.ContentEncoding = Encoding.GetEncoding("SHIFT_JIS"); ByteArrayOutputStream zipBarray = new ByteArrayOutputStream(); ZipOutputStream zipStream = new ZipOutputStream(zipBarray); 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("test.csv"); zEntry.setMethod(ZipOutputStream.DEFLATED); zipStream.putNextEntry(zEntry); zipStream.write(bArray.toByteArray(), 0, bArray.toByteArray().Length); zipStream.closeEntry(); zipStream.flush(); zipStream.close(); byte[] writeBarray = new byte[zipBarray.size()]; System.Buffer.BlockCopy(zipBarray.toByteArray(), 0, writeBarray, 0, zipBarray.size()); Response.BinaryWrite(writeBarray); Response.End(); |