絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Ruby-CGI-uploder 作り
Ruby on Railsっていうのあるけど
物凄く使い方がわからない
いつになってもわからない、(利点はわかるけど)
そんで、さらにRuby on Railsを使わないCGIのサンプル乗せてるサイトが
全然ないので、RoR頼らず作りたい人も他にいるかなって思って
ちょっとアップローダーの作り方でも乗せてみます


この記事でかいてるrubyはRuby1.9.3p0です
まず、Ruby-CGIを動かす環境作りですね

http://www.ruby-lang.org/ja/old-man/html/WEBrick_HTTPServer.html

こことかをみて、まぁこんなサーバーをかいてみます



require 'webrick'
require "socket"

$localip = IPSocket::getaddress(Socket::gethostname)

http = {
:ServerName => "test_server_", # WEBrick::Utils.getservername
# :BindAddress => $localip, # "0.0.0.0" or "::" or nil
:BindAddress => "127.0.0.1", # "0.0.0.0" or "::" or nil
:Port => 80,
:MaxClients => 100, # maximum number of the concurrent connections
:ServerType => nil, # default: WEBrick::SimpleServer
:Logger => nil, # default: WEBrick::Log.new
:ServerSoftware => "WEBrick/#{WEBrick::VERSION} " +
"(Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})",
:TempDir => ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp',
:DoNotListen => false,
:StartCallback => nil,
:StopCallback => nil,
:AcceptCallback => nil,
:DoNotReverseLookup => nil,

:RequestTimeout => 30,
# :HTTPVersion => HTTPVersion.new("1.1"),
:AccessLog => nil,
:MimeTypes => WEBrick::HTTPUtils::DefaultMimeTypes,
:DirectoryIndex => ["index.html","index.htm","index.cgi","index.rhtml"],
:DocumentRoot => "./",
:DocumentRootOptions => { :FancyIndexing => true },
:RequestCallback => nil,
:ServerAlias => nil,

:CGIInterpreter => 'C:\ruby\bin\ruby.exe',
:CGIPathEnv => nil,

# workaround: if Request-URIs contain 8bit chars,
# they should be escaped before calling of URI.parse().
:Escape8bitURI => false
}
srv = WEBrick::HTTPServer.new( http )
srv.start


# koko made
> :CGIInterpreter => 'C:\ruby\bin\ruby.exe',
ユーザーごとに変更する点は、ここだけかな
rubyのPATHあわせてください

それで
http://127.0.0.1/
にアクセスできればok

外にも公開するサーバーにする場合は
># :BindAddress => $localip, # "0.0.0.0" or "::" or nil
ここのコメントアウトをとって
http://自分のIP/
でアクセス可能



そしたら、とりあえず適当にアップローダーかいてみる
http://www.ruby-lang.org/ja/old-man/html/cgi.html#a.a5.d5.a5.a9.a1.bc.a5.e0.a5.d5.a5.a3.a1.bc.a5.eb.a5.c9.a4.ce.c3.cd.a4.f2.c6.c0.a4.eb
↑情報ふるいけどこのあたりを参考に出来るかな



下のソースの、それを

test_up.cgi
とか名前をつけて、サーバーと同じディレクトリに保存
あと、cgi_upってフォルダも作っておきましょう

んで
http://127.0.0.1/test_up.cgi
にアクセスして
"file to nil"
ってメッセージが見れたら、RubyCGI動いてます





#!/usr/local/bin/ruby
require 'cgi'
print "Content-type: text/html\n\n";

print <<-TEXT
<html><head><title> test_uploder </title></head>
<body>
<form method="POST" enctype="multipart/form-data">
file <input type="FILE" name="file">
<input type="submit" value="upload">
</form>
</body></html>
TEXT
#------------------------------------------------------------
cgi = CGI.new
value = cgi.params["file"].first
if value.nil?
print "file to nil"
else
mkfile = Dir.getwd + "/cgi_up/" + value.original_filename
open( mkfile , "wb") do |f|
f.write value.read
end
print "upload is " , mkfile
end

print '<hr color="#88ccaa" size="5" width="350" align="left">'

Dir["cgi_up/*.{jpg,png}"].each do | m |
m = File.basename m
print "<a href=cgi_up/#{m}>#{m}</a><br>\n"
end



conp_cgi0_r.jpg


自分でhtmlタグ書くときに気をつける事は multipart/form-data かな
マルチパートフィールドっていうらしいんだけど、これをFORMタグのところに指定しないと
バイナリデータの通信が出来ないらしい

適当に参照で何かアップできたら成功です

jpg と png しか一覧には表示しないようにしているので
ローマ字のみのファイル名の画像等をアップロードしてみましょう


Rubyの使えるフリーのHPスペースには
http://atpages.jp/
とか、あります



    0..

kakikomi