絵を描いたりネットいろいろ
スポンサーサイト
上記の広告は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
こことかをみて、まぁこんなサーバーをかいてみます
物凄く使い方がわからない
いつになってもわからない、(利点はわかるけど)
そんで、さらに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
自分でhtmlタグ書くときに気をつける事は multipart/form-data かな
マルチパートフィールドっていうらしいんだけど、これをFORMタグのところに指定しないと
バイナリデータの通信が出来ないらしい
適当に参照で何かアップできたら成功です
jpg と png しか一覧には表示しないようにしているので
ローマ字のみのファイル名の画像等をアップロードしてみましょう
Rubyの使えるフリーのHPスペースには
http://atpages.jp/
とか、あります