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=/