From: Michael Schilling Date: 2006-02-09T05:35:28+09:00 Subject: can't get multipart_form from cgi.rb to work Hello everyone, I'm fairly new to ruby and wanted to write a very simple cgi program, which uploads a file and returns a converted file. Because it is so easy (and I want to learn about ruby) I tried to do it with the standard cgi.rb library. But I can't get the multipart_form (I need it for the file upload) to work right. Everything works fine using the normal form method, but with the multipart_form I always get an EOF Error 'no content body' in the apache log. As soon as there is any input from an multipart_form, an error occurs at: checkfile = CGI.new Below you'll find my code (I boiled it down to the important stuff) and the corresponding part of my apache2 error_log. I searched the web, several mailing lists and the ruby docs, but couldn't find an answer. I also asked on #ruby-lang in freenode, but no one there knew the cgi.rb library very well. Any help, on why this server error is happening, is very much appreciated. Bye, Michael <-- who hopes, that this is the right list for the question My code: ------------------------------------------------------------------ #!/usr/bin/ruby -w require "cgi" # make_form create a very simple html form def make_form make_form = CGI.new("html4") make_form.out { make_form.html { make_form.body { "\n" + # make_form.form{ "\n" + # everything works using the normal form make_form.multipart_form{ "\n" + # but not with multipart_form to upload a file make_form.file_field("filename",40,500000) + "\n" + make_form.br + make_form.submit("test it") + "\n" } } } } end # answer should show the filename of the uploaded file def answer(file_in) answer = CGI.new("html4") answer.out { answer.html { answer.body{ "\n" + answer.p{ "This should be the filename:" + file_in + "\n" } + answer.br } } } end begin checkfile = CGI.new parameter = checkfile['filename'] # parameter = checkfile.params['filename'][0] # this doesn't work either rescue answer("ERROR: " + $!.to_s) # send eror message to browser if possible end # create form if no data was send to the script, otherwise answer if parameter == "" make_form() else answer(parameter.to_s) end ------------------------------------------------------------------ Apache log: ------------------------------------------------------------------ [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] /usr/lib/ruby/1.8/cgi.rb:979:in `read_multipart', referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] : , referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] no content body, referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] (, referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] EOFError, referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] ), referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom /usr/lib/ruby/1.8/cgi.rb:1104:in `initialize_query', referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom /usr/lib/ruby/1.8/cgi.rb:2270:in `initialize', referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom /home/httpd/cgi-bin/multiform-test.rb:25:in `answer', referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom /home/httpd/cgi-bin/multiform-test.rb:52, referer: http://localhost/cgi-bin/multiform-test.rb [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] Premature end of script headers: multiform-test.rb, referer: http://localhost/cgi-bin/multiform-test.rb ------------------------------------------------------------------ -- Michael Schilling eMail : ruby@untiefe.de URL : http://glcu.sf.net/ "Change my name I remain the same." - Moloko