Re: SISCweb & File Upload
"Alessandro Colomba" <[email protected]> Tue, 22 Jul 2008 22:29:10 -0400
| Newsgroups | gmane.comp.java.sisc.user |
|---|---|
| Message-ID | <[email protected]> |
Gerardo, I'm glad to hear that, and thank you for posting your solution. If you don't mind, I'd like to ask you about the character encoding. I would imagine you could read the character encoding of the request and then use that when reading the parameters, much like the standard (get-binding) does. Is there a reason that was not possible in your case? ___ Alessandro On Tue, Jul 22, 2008 at 2:05 AM, Gerardo Horvilleur <[email protected]> wrote: > That's exactly what I did :) > I wrote my own (get-upload-bindings), and I found the util/misc module > which has been very useful! > > I just got it to work about a couple of minutes ago. > > Some of the problems I had to solve: > > 1. If the request is not in multipart format then the > ServletFileUpload.parseRequest() throws an exception. So my > (get-upload-bindings) first checks if the request is in multipart > format, and if it isn't then it delegates the work to the standard > (get-bindings). I need this because I have a "Cancel" link on my form > which won't send the request data in multipart format. > > 2. I have some fields where the name is not in 7 bit ascii (it is a > content management system where the users can define the fields that > need to be entered for each kind of entity, and they assign the names > they want to each field they create), and the file upload library does > not handle those names correctly. To work around this, I wrote some > code to create an "external" name which only uses 7 bit ascii > characters for each field name. > > 3. The file upload library seems unable to handle multiple checkboxes > with the same name, it just returns the value of the last checked > checkbox. So it is impossible to have (get-upload-bindings) return a > list of values. It turns out I never need to have both file uploads > and multiple checkboxes with identical names in the same web page for > my application. So I did not have to solve this problem :) > > On Mon, Jul 21, 2008 at 11:52 PM, Alessandro Colomba <[email protected]> wrote: >> Gerardo, >> >> You're right, I had forgotten that in J2EE the >> HttpServletRequest.getParameter*() methods don't handle multipart >> requests. >> >> The FileUtil library however allows you to read that information with >> the readHeaders() call. It's a bit clunky, with Iterators and the >> such, but consider that: >> >> 1) The (get-bindings) procedure returns a plain Java Map as per [1]. >> This is not ever going to change. >> >> 2) You can implement your (get-bindings/multipart) procedure either as >> a wrapper around some Java code that extracts a parameter Map from the >> FileUpload MultiPartstream, or directly, and somewhat naturally, using >> the (iterator/for-each) procedures in the util/misc module. [2] >> >> Sorry this couldn't be any simpler. >> ___ >> Alessandro >> >> [1] http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletRequest.html#getParameterMap() >> >> [2] http://siscweb.cvs.sourceforge.net/siscweb/siscweb/scm/util/misc.scm?revision=1.4&view=markup&pathrev=rel-0-6-dev >> >> >> >> >> >> On Mon, Jul 21, 2008 at 3:27 AM, Gerardo Horvilleur <[email protected]> wrote: >>> I've been doing a few tests and I have a problem. In order to be able >>> to upload files y must declare the form's enctype to be >>> multipart/form-data: >>> >>> (form (@ (action ,k-url) (enctype multipart/form-data)) ... >>> >>> But, once I do this, get-bindings isn't able anymore to extract the >>> bindings from the request object. It just returns an empty map. >>> >>> On Sun, Jul 20, 2008 at 11:16 PM, Alessandro Colomba <[email protected]> wrote: >>>> Gerardo, >>>> >>>> The request object returned by the some of the send-*/* procedures is >>>> the actual HttpServletResponset object. You can most certainly place >>>> more than one call to it. >>>> >>>> The response object is also always available through the >>>> (current-response) procedure in the siscweb/response module. [*] So >>>> your file upload module does not technically need to be passed the >>>> response object, and you can keep the (get-bindings) call n place. >>>> >>>> Hope this helps, >>>> ___ >>>> Alessandro >>>> >>>> [*] http://siscweb.sourceforge.net/swm/ch08.html#response >>>> >>>> >>>> >>>> On Sun, Jul 20, 2008 at 1:38 AM, Gerardo Horvilleur <[email protected]> wrote: >>>>> The Apache Commons File Upload library is what I have used in other >>>>> projects written in Java. >>>>> >>>>> So, it looks like I''ll have to do something like >>>>> >>>>> (let ((request (send-thml/suspend ... >>>>> >>>>> instead of doing >>>>> >>>>> (let ((bindings (get-bindings (send-html/suspend ... >>>>> >>>>> so I can give the request to the file upload library to extract the data. >>>>> >>>>> What I don't know is if, after I've used the request object with the >>>>> file upload library, I still can do a a >>>>> >>>>> (let ((bindings (get-bindings request))) ... >>>>> >>>>> To extract the values for the parameters which are not file uploads. >>>>> >>>>> All the pages in which I need to support file uploads also have many >>>>> other fields, and I would like to still be able to use get-bindings to >>>>> handle them. >>>>> >>>>> On Sat, Jul 19, 2008 at 8:31 PM, Alessandro Colomba <[email protected]> wrote: >>>>>> Gerardo, >>>>>> >>>>>> Unfortunately file uploads in J2EE are best handled through >>>>>> third-party libraries, and I really did not want to tie SISCweb to >>>>>> one. Apache Commons has a pretty good library (FileUpload), and I >>>>>> wouldn't imagine difficult to write a Scheme wrapper around it. >>>>>> >>>>>> Should you decide to go this route, and encounter any obstacles in >>>>>> SISCweb, please let me know. I'll be glad to clear them out. >>>>>> >>>>>> Regards, >>>>>> ___ >>>>>> Alessandro >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Sat, Jul 19, 2008 at 6:14 PM, Gerardo Horvilleur <[email protected]> wrote: >>>>>>> For the application I'm writing, I need to let the user upload images >>>>>>> to the server. I haven't found any straightforward way to handle file >>>>>>> uploads in SISCweb. Has anybody already written some code to handle >>>>>>> this? >>>>>>> >>>>>>> -- >>>>>>> Gerardo Horvilleur >>>>>>> [email protected] >>>>>>> 5813-0830 >>>>>>> >>>>>>> ------------------------------------------------------------------------- >>>>>>> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge >>>>>>> Build the coolest Linux based applications with Moblin SDK & win great prizes >>>>>>> Grand prize is a trip for two to an Open Source event anywhere in the world >>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/ >>>>>>> _______________________________________________ >>>>>>> Sisc-users mailing list >>>>>>> [email protected] >>>>>>> https://lists.sourceforge.net/lists/listinfo/sisc-users >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Gerardo Horvilleur >>>>> [email protected] >>>>> 5813-0830 >>>>> >>>> >>> >>> >>> >>> -- >>> Gerardo Horvilleur >>> [email protected] >>> 5813-0830 >>> >> > > > > -- > Gerardo Horvilleur > [email protected] > 5813-0830 > ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/