忍者ブログ
全くIT系ではない製造業の社員がイントラ上でColdFusionと格闘。システム構築を外部委託するとき「できればColdFusionでお願いします」と頼むのだが・・・・
[60] [59] [58] [57] [56] [55] [54] [53] [52] [51] [50]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

乗っていた電車で痴漢騒ぎがありました。
誤解だと言ってましたが・・・・・大変だな。

さて、

aspxメインで動いているシステムで、複数ファイルをzipに圧縮して落とす仕組みを追加(外注)しました。
Chestysoft(http://www.chestysoft.com)というところのcsASPZipFileというASPコンポーネントで実装してもらったのですが、ダウンロードがとても遅い・・・・・
ダウンロード中の速度を見ていると、200KB/sくらいで始まり、だんだん遅くなって50KB/sくらいになってしまいます。
100MBくらいのボリュームになる場合も多いので、これでは使い物になりません。

調べると、zipファイル作成はサックリ終わっているのに、csASPZipFileコンポーネントのStreamZipメソッドが遅い模様。
Basp21のストリームを使ってみたりしてもらったのですが、外注先のSEさん曰く、『・・・手詰まりです』とのこと。

そのシステムのサーバーにはColdFusionMX7が載っているので、ColdFusionでzipファイル作る方法はないのかなぁ・・・・と調べ始めたところ、csASPZipFileのマニュアルにColdFusionの文字がっ!
Using csASPZipFile With ColdFusion
そもそも名前にASPとついていたので、ColdFusionで使えるとは思ってもいませんでした。

早速テスト。サンプルコードもあったので、あっという間にテスト完了。
Goodです。イントラレベルのダウンロードスピードが出てると思います。

テストソースはこんな感じ。
※select.cfm makezip.cfmを同じパスに置いて、その下にdatafilesフォルダを作ってダウンロード対象ファイルを入れます。

======================= select.cfm ========================
<html>
<head>
<title>Make selection</title>
</head>

 

<body>
<p>Select the files for download</p>
<form action=makezip.cfm method=post>

<cfset dir = ExpandPath(".") & "\datafiles\">
<cfdirectory directory="#dir#" name="datafiles">
<cfset I = 0>
<cfoutput query="datafiles">
<cfif (#name# NEQ ".") and (#name# NEQ "..")>
<input type=checkbox value=true name=#I#>#name#<br>
</cfif>
<cfset I = I + 1>
</cfoutput>

<input type=hidden name=directory value="<cfoutput>#HTMLEditFormat(dir)#</cfoutput>">
<input type=reset value=Clear><input type=submit value=Download>
</form>
</body>
</html>

======================== makezip.cfm ======================
<cfcache action="flush">
<cfset dir=form["directory"]>
<cfset filename=ExpandPath(".") & "\" & CreateUUID() & ".zip">
<!-- use the appropriate version of the component -->
<!---<cfobject action="create" name="zip" class="csASPZipFileTrial.MakeZip">--->
<cfobject action="create" name="zip" class="csASPZipFile.MakeZip">
<cfset I=0>
<cfdirectory directory=#dir# name="datafiles">
<cfoutput query="datafiles">
<cftry>
  <cfif form["#I#"] EQ "true">
    <cfset zip.ZipAdd(dir & #name#)>
  </cfif>
<cfcatch>
</cfcatch>
</cftry>
<cfset I = I + 1>
</cfoutput>
<cfset zip.SaveZip(#filename#)>
<cfcontent type="application/x-zip-compressed" deletefile="yes" file=#filename#>

 う~ん。やっぱりColdFusionが好き。

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
はじめまして。
CFの情報を求めて徘徊しているものでして、ちょくちょく読ませていただいてます。

zip圧縮ですが、
cflibでZipFileNewというFunctionを見つけました。
http://www.cflib.org/udf.cfm?id=744

java.util.zip.ZipOutputStreamを使っているみたいです。

ソースも短いしJavaを知らない私でも手軽に組み込めそうです。
私には使う予定が無いのでサビシイところですがどうでしょう(^^;
sussussu 2006/12/12(Tue)13:52:25 編集
UDF使ってみました
sussussu さん 情報ありがとうございます。
cfscriptベースのUDFのようですね。
designed for ColdFusion 5.0とありますが、気にしない気にしない。
早速試してみました。

#zipFileNew(ExpandPath("test.zip"),ExpandPath("images/"))#

てな感じで使ってみたんですが、zipファイルはできるけど、中身は空っぽ というのが現状です。

なんだろなぁ・・・もうちょっとやってみます。
CFIF 2006/12/12(Tue)19:40:47 編集
おぉっ、さっそく試して頂けましたか
>designed for ColdFusion 5.0
Required CF Version: ColdFusion MX
って書いてあるので大丈夫だと思いますよ。:)

>中身が空っぽ
私も同じ症状になりましたが第三引数を指定することで解決しました。↓

<cfset tmp=zipFileNew("C:\aaa.zip","C:\aaa.txt","C:\")>

29行目には(Optional)って書いてありますが必須のような・・・、気長にもうちょっと弄くってみます。
sussussu 2006/12/13(Wed)14:38:42 編集
この記事へのトラックバック
この記事にトラックバックする:
ブログ内検索
プロフィール
HN:
CFIF
性別:
男性
自己紹介:
もっと日本でもColdFusionが広まって欲しいです。

情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。

外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・

FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
最新トラックバック
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
なかのひと
忍者ブログ [PR]