プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になります。
WebサーバーのCSVをダウンロードするのに次のようなCCGIを使っています。
*****************************************
#! /usr/bin/perl
open FH, "./data.csv";
print <<__EOH__;
Content-Type: text/download; name="data.csv"
Content-Disposition: inline; filename="data.csv"

__EOH__
print <FH>;
close FH;
*****************************************

1つだけならこれでOKなんですが、例えばdata1.csv、data2.csv、data3.csvという3つのCSVをダウンロードさせるにはどのようにコーディングすればよいのでしょう?

A 回答 (2件)

 1つのコネクションで送信できるファイルの数は1つだけです。


 裏技を使えば1つのコネクションで3つ送信できますが、同時には無理です。

 よって、window.open("download.cgi?file=data1.csv","_new"); という JavaScript を3回実行してしまう方法が一番確実でしょう。
    • good
    • 0
この回答へのお礼

お応えありがとうございます。
無理なら仕方ありません。そんなことが出来たらいいなぁ~と思っただけですから、ダウンロードしたいファイルの数だけボタンをつくります。

お礼日時:2004/08/05 11:05

3つのファイルを1つに纏めて圧縮して1つのファイルにして、送るというのはできると思います。



下に挙げているのはウェブサーバがUNIXのマシン時の例です。
(ただし、SUNOSとSolarisではtarのオプションの関係でこのままでは動きません。)

------------------------------------------------
#送る3つのファイルの指定をしています
$DataFile1='aaa.dat';
$DataFile2='bbb.dat';
$DataFile3='ccc.dat';
#UNIXコマンドを呼び出して圧縮をかけています。
`tar zcvf tmp$$.tgz $DataFile1 $DataFile2 $DataFile3`

##ここから下は引用してます
open FH, "./tmp$$.tzg"; #書き換えました
print <<__EOH__;
Content-Type: text/download; name="data.csv"
Content-Disposition: inline; filename="data.csv"

__EOH__
print <FH>;
close FH;
##付け加え
`rm tmp$$.tgz`; #圧縮したファイルを消しています

------------------------------------------------

ただし、CSVファイルが大きすぎるて纏めて圧縮するのに時間のかかる大きなものであるばあい、ホストの負荷によっては、転送を開始するまでに時間がかかってタイムアウトする場合がありますので、注意が必要です。
    • good
    • 0
この回答へのお礼

おこたえありがとうございます。

>UNIXのマシン時の例です。

ホスティングサーバーを使用しています。多分UNIXサーバーだと思うのですが、私自身はUNIXの知識がありませんのでUNIXコマンドといわれても、はて???という感じです。せっかく教えていただいたのに知識がついていってません。すみません。

お礼日時:2004/08/05 11:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!