- PR -

複数のファイルを強制的にダウンロード

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-10-15 22:04
全部いいとこだけ取り、は出来ない、ってことかも。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2005-10-16 01:19
引用:

MechanicalLifeさんの書き込み (2005-10-14 14:41) より:
LZHやZIPで5つのファイルを1つにまとめたものを
ダウンロードしてもらうというのではだめですかね。



LZHであれば、自己解凍形式にできますので、それであればUNLHAのような解凍ソフトを
クライアントにインストールすることなく 指定フォルダにダウンロードすることが
可能ですね。

あるいは、インストールシールドのようなインストーラ作成ソフトで、5つのファイルを
"インストール"するexeファイルを作成しそれをダウンロード&実行してもらうというの
もテですね。

NA(-_-)MI
常連さん
会議室デビュー日: 2003/10/30
投稿数: 32
投稿日時: 2005-10-17 15:08
引用:

ひらさんの書き込み (2005-10-14 19:12) より:
ブラウザで、という縛りがなければ、WSHで可能なようです。
ネットを漁り、以下のサンプルを見つけました。
http://winscript.s41.xrea.com/wiki/index.php?[[FAQ]]#content_1_10



WSHでの方法を元にJavaScriptで作ってみましたので
サンプルソースを載せておきます。

---------------------------------------------------------------------
//定数宣言
var adTypeBinary = 1;
var adSaveCreateNotExist = 1;
var adSaveCreateOverWrite = 2;

//ボタンを押したときにサーバからダウンロードする
function button_click(){

httpToLocal("http://(サーバ名)(パス名)(ファイル名)", "C:\temp\(ファイル名)");
httpToLocal("http://(サーバ名)(パス名)(ファイル名)", "C:\temp\(ファイル名)");
}

//ダウンロード処理
function httpToLocal(asSource, asDest){
var oHTTP = new ActiveXObject("Msxml2.XMLHTTP");
oHTTP.Open("GET", asSource, "False");
oHTTP.Send();
var Stream = new ActiveXObject("Adodb.Stream");
Stream.Type = adTypeBinary;
Stream.Open();
Stream.Write(oHTTP.responseBody);
Stream.Savetofile(asDest, adSaveCreateOverWrite);
}
---------------------------------------------------------------------
まだ中身については詳しく調べていませんが、
とりあえず動作確認までできました。

確かにこんなサイトがWeb上にあったらアクセスが怖くなります。
ActiveXを自動で実行させることはしてはならないと再認識します。


WEBで使用しているグループウェアの1機能として追加したいために
WEBを採用しました。ダウンロード状況などをデータベースに登録し、
各支店の利用状況もその中で確認したいなどの要件もありました。
「お客様の要件」がWEBへのこだわりです。

他にも色々な案を出していただき、ありがとうございました。
みなさんのおかげで、どうにか前に進むことができると思います。
みなさんのレスには感謝・感激です。

また何かありましたらよろしくお願いいたします!!
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-17 19:07
折角解決したところで申し訳ないですが、少々突っ込みを。

ADODB.Streamを使用するとかかれてますが、
対象のお客さんの環境で動く事が確認されていますか?
ADODB.StreamをIEから起動できないようにするパッチが
WindowsUpdateで提供されています。

レジストリのエントリを修正すれば起動するようになりますが、
ADODB.Streamの実行をブラウザで許すというのは
脆弱性によってスクリプトの実行ができた場合に、
ウィルス等のインストールが可能になる事になります。
特定のサイトだけっていうわけにはいかず、
全てのサイトを閲覧する時も関係してくる問題です。

ですので、
・脆弱になるので他の業務システム以外は見ない
・WindowsUpdateでADODB.Streamの無効化パッチを今後一切適応しない
と言う条件をお客さんに提示する必要があると思います。

ちなみに、クライアント環境による影響を受けにくい方法として、
ActiveXコントロールがあります。
ローカルのファイルシステムにアクセスするコントロールを作成し、
CABファイルに纏めてからサーバに配置して、
クライアントにはOBJECTタグでロードさせます。
Flashプラグインみたいに署名付きにすると完璧ですね。

私が以前作成した時には署名はつけませんでしたが。

最後に参考までに。
http://support.microsoft.com/default.aspx?scid=kb;ja;870669
NA(-_-)MI
常連さん
会議室デビュー日: 2003/10/30
投稿数: 32
投稿日時: 2005-10-17 19:38
鋭いツッコミありがとうございます!!

気になって確認してみましたが、
自分の端末には既に起動できないようなレジストリ設定になっていました。
しかし、実行できるみたいです。。
何故実行できるかはもう少し調べてみたいと思います。

ActiveXコントロールを使用する方法ですが、
1から作成する場合の参考になるページはないでしょうか?
今のところVisualStudio2003を使って、
新規→CABプロジェクトでいいのかな?と手探りで進行中です。

ではでは。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2005-10-20 20:40
引用:

NA(-_-)MIさんの書き込み (2005-10-17 15:08) より:
WSHでの方法を元にJavaScriptで作ってみましたので
サンプルソースを載せておきます。


このコードは、HTMLに埋め込んだものですよね。
スクリプト部分を分離させて、HTMLファイルと同じところに拡張子vbs(down.vbsなど)で
保存します。
そして、HTMLからwindows.openでdown.vbsを開くようにします。
(たとえば、onclickで呼び出すようにすればいいと思います。)
ダウンロードのメッセージが出ますが、ここで「開く」をクリックします。
そうすると、down.vbsが実行され、複数のファイルをダウンロードすることができます。
さきほど、その方法でやってみて成功しました。
NA(-_-)MI
常連さん
会議室デビュー日: 2003/10/30
投稿数: 32
投稿日時: 2005-11-02 19:26
レジストリ変更せずに
ADODB.StreamをIEから起動する方法を見つけたのでご報告です。

インターネットオプション
 → セキュリティ → レベルのカスタマイズ にて

「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」

という項目を有効にする

この方法だと信頼済みサイトのみに適用可能なので
セキュリティも保てるかと思います。

ご報告でした。

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