こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複数のCSVを一度にダウンロード

いつもお世話になります。
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をダウンロードさせるにはどのようにコーディングすればよいのでしょう?

投稿日時 - 2004-08-03 15:52:14

QNo.949600

困ってます

質問者が選んだベストアンサー

 1つのコネクションで送信できるファイルの数は1つだけです。
 裏技を使えば1つのコネクションで3つ送信できますが、同時には無理です。

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

投稿日時 - 2004-08-03 16:54:22

お礼

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

投稿日時 - 2004-08-05 11:05:52

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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ファイルが大きすぎるて纏めて圧縮するのに時間のかかる大きなものであるばあい、ホストの負荷によっては、転送を開始するまでに時間がかかってタイムアウトする場合がありますので、注意が必要です。

投稿日時 - 2004-08-03 19:16:37

お礼

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

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

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

投稿日時 - 2004-08-05 11:10:25

あなたにオススメの質問