- PR -

圧縮ファイルのダウンロードについて

投稿者投稿内容
IIJIMAS
ベテラン
会議室デビュー日: 2006/12/06
投稿数: 77
投稿日時: 2007-11-01 17:19
引用:

MSDNを見てもBinaryWrite or OutputStreamを記述した処理に
どうやって入れ込むかが分かりません。
処理自体を変えないと難しいのでしょうか?


大体こんな流れでどうでしょうか。

別の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
も使えると思います。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-11-01 18:22
引用:

IIJIMASさんの書き込み (2007-11-01 17:19) より:

別のByteArrayOutputStreamのインスタンスを作成し、
それを ZipOutputStreamのコンストラクタの引数で渡して
ZipOutputStreamインスタンスを作成して、それにデータを書き込み、



あっそうか、J# だから、
コード:
ZipOutputStream zipStream = new ZipOutputStream(Response.OutputStream); 


とは書けないのか、すみませんでした。

IIJIMAS さんの方法のように一度バッファに格納して引き渡してあげないとだめですね。

_________________
かるあ のメモスニペット
ボルビ
ベテラン
会議室デビュー日: 2007/05/23
投稿数: 52
投稿日時: 2007-11-01 19:14
引用:

IIJIMASさんの書き込み (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[]
を出力するのでどうでしょうか。



Buffer.BlockCopyメソッドを使うには何かusingを追加する必要があるのでしょうか?
表示されないので・・・
それとBuffer.BlockCopyメソッド使ってsbyte[] →byte[]に
変換するという事で宜しいんですよね?


ボルビ
ベテラン
会議室デビュー日: 2007/05/23
投稿数: 52
投稿日時: 2007-11-01 19:56
引用:

ボルビさんの書き込み (2007-11-01 19:14) より:
Buffer.BlockCopyメソッドを使うには何かusingを追加する必要があるのでしょうか?
表示されないので・・・
それとBuffer.BlockCopyメソッド使ってsbyte[] →byte[]に
変換するという事で宜しいんですよね?



すいません、System.Buffer.BlockCopyで表示されました。
ボルビ
ベテラン
会議室デビュー日: 2007/05/23
投稿数: 52
投稿日時: 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);
ボルビ
ベテラン
会議室デビュー日: 2007/05/23
投稿数: 52
投稿日時: 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();

スキルアップ/キャリアアップ(JOB@IT)