From: Wakou Aoyama Date: 1999-11-12T07:59:20+09:00 Subject: [ruby-list:18540] Re: How to upload file*s* 青山です。 On Fri, 12 Nov 1999 00:13:34 +0900, Toyofuku wrote: > |
> | > | > |
> | ---------- > | の場合、 > | ---------- > | use CGI; > | $query = new CGI; > | $filename = $query->param('uploaded_file'); > | # Copy a binary file to somewhere safe > | open(OUTFILE,">>/usr/local/web/users/feedback"); > | while ($bytesread=read($filename,$buffer,1024)){ > | print OUTFILE $buffer; > | } > (質問1) > これと同様のことを ruby でできますか。 同じように書くと、こんな感じでしょうかね。 require 'cgi' query = CGI.new file = query.params['uploaded_file'][0] outfile = File.open("/usr/local/web/users/feedback", "w") while buffer = file.read(1024) out_file.print buffer end もっとも、query.params['uploaded_file'][0] がすでに File(Tempfile) オ ブジェクトなので、実際にはこのようにコピーしなくても、そのまま query.params['uploaded_file'][0].gets 等で読み出して使えますし、params メソッド経由でなく query['uploaded_file'][0] でもいけます。 require 'cgi' query = CGI.new while line = query['uploaded_file'][0].gets line.gsub!(/foo/, "bar") print line # 等々、お馴染みの作業 end > (質問2) > だと一ファイルずつ選んでいか > なければならないので 等で > 複数ファイルを選んでから一気にアップロードしたいのです > が可能でしょうか。 まず、select エレメントの要素は option エレメントで、option エレメント の要素はテキストですから、ファイルは扱えません。 また、input エレメント以外にはファイルを扱えるエレメントは無いと思いま すから、これを並べる以外に方法は無いでしょう。 という事で、複数ファイルをまとめて選択するというエレメントがありません から、複数ファイルをまとめて選択できるクライアントも無いと思われます。 > (質問3) > もし上記のことができるとして(Rubyには申し訳ないですが) > 「できれば perl で実装してくれないか」と言われるのは必至 > なので perl での方法もあればお願いします。 どうしてもやりたいという事であれば、複数の を並べ たフォームに対するレスポンスと同じ応答をするクライアントを自作という事 になるでしょうか。 > (質問4) > JavaScript を使ってローカルマシンのファイル名の一覧を > ブラウザに表示することができるでしょうか。Java Applet では? JavsScript や Applet って、ファイル操作が禁止されていませんでしたっけ? もしそれが出来ると、ユーザーに知られないようにファイル名の一覧を得る事 も出来ますよね。 さらには、ファイル名が得られれば、フォームに紛れさせて、そのファイルを 盗む事も出来てしまうかもしれません。 という事で、http での複数ファイルの一括アップロードの手段としては、オ リジナルクライアントという事になるかと思いますが、それよりは、ftp を併 用して、ユーザーには適当な使いやすい ftp クライアントを使ってもらうの が良いような気がします。 -- 青山 和光 Wakou Aoyama