Martin Hart wrote: >Hi all, > >I have a single HTML form which contains simple text controls as well as file >upload controls. I had assumed that the CGI library would return me items of >type String for the text boxes and items of type Tempfile for the file upload >boxes.... > >However, it appears (after searching the archives) that StringIO is used >instead of Tempfile on ruby 1.8 (in some cases and not others?), and that as >soon as you specify an enctype of multipart you never? receive Strings but >always receive either Tempfile or StringIO. > >This is what i really want from the CGI library: >* CGI returns *everything* as a string except for file uploads - which are >returned as Tempfiles > >Assuming that I cannot have that :-) can somebody in the know please tell me >(or point me to some documentation)... > >1. how can I tell whether or not the supplied parameter was a file upload or >simple text that has been passed to me as a Tempfile/StringIO? At the moment >I don't know whether to copy the file or not - because I don't know if it is >a valid file or just another parameter. > > If it is just posted, its text. If you use enctype=multipart/form-data then all will be files. If you use the second, use $cgi['your_form_item'][0].read to get the text value. For example: oOverwrite = $cgi['overwrite'][0] #this is a checkbox if oOverwrite overwrite = oOverwrite.read.chomp #i'm reading it's value if overwrite == 'on' then bOverwrite = true end end Notice i never close the tmp file. Never thot about it ;o) >2. do hidden controls work with multi-part forms? there is some discussion of >them not working on the mailing list dating back to last November but I don't >know if that has been fixed or not. My limited testing here indicates that >hidden parameters are ignored on multipart forms? > > > Yes. You'll need to access them as if they were a file - like above. >3. why are all values expressed as Tempfile/StringIO when using a multipart >form? Why not just have the file uploads as tempfiles? > > > I've not used StringIO >4. how does the CGI library determine whether or not to switch between >Tempfile/StringIO > > > Dont know >5. do I have to specifically close the IO object (assuming that one is >returned?) - or perhaps I do not have to close the StringIO but I do have to >close the Tempfile? > > > Hum, dont know.I've never closed them >6. are all of the form parameters in different tempfiles or are they all in >one? Say i close the file after reading 1 argument ... does this mean that I >cannot read any more? > > > I _think_ they are individual files. Somthing to note : IE sends the whole path for the file name. NS(1.6) only send the name. CGI can be kind of counter intuitive - but it will work! :P