hi jan,

> -----Ursprüngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]
> Auftrag von Jan Wielgus
> Gesendet: Donnerstag, 13. November 2003 10:15
> An: [EMAIL PROTECTED]
> Betreff: File upload
>
>
> Hello,
>
> I would like to get the file upload working with cocoon 2.1, but
> unfortunately the examples in wiki don't give enough for such newbie
> as me :( In the wikipage about upload with flow written by Geoff
> Howard there are two possibilities showed. The first one, with
> JavaScript contains the following line:
>
> var role = Packages.org.mystuff.UploadManager.ROLE;
>
> The problem is, I don't know, where I should take the ROLE object
> from? I actually get stuck at this moment, when I want to do
> something here...

the UploadManager in this example is a custom (Avalon) component. if you
don't know about Avalon components, containers, roles, etc. you might want
to read about that first (that is, if you want to go the component way).

> The second possibility says "Alternatively, you can write the
> following java code in your sitemap components". What does it
> actually mean here? An Action? If yes, is it possible to get the
> complete code of that action?
>
> Or maybe someone has a working example of a file upload? Any help
> would be really appreciated.

following short example is for cocoon 2.0.4, but I guess it should also work
for 2.1.x:

...
public class MyUploadAction
        extends AbstractLogEnabled
        implements Action
{

        /* (non-Javadoc)
         * @see
org.apache.cocoon.acting.Action#act(org.apache.cocoon.environment.Redirector
, org.apache.cocoon.environment.SourceResolver, java.util.Map,
java.lang.String, org.apache.avalon.framework.parameters.Parameters)
         */
        public Map act(
                Redirector redirector,
                SourceResolver resolver,
                Map objectModel,
                String source,
                Parameters par)
                throws ParameterException
        {
// the action parameter 'parameter-name' specifies the request parameter
name the uploaded file is bound to
                        String
                paramName = par.getParameter("parameter-name");

// get the request
                        Request
                request = ObjectModelHelper.getRequest(objectModel);

// get the FilePart (handle to the file) from the request parameter
                        FilePart
                filePart = (FilePart) request.get(paramName);

// ok, file was successfully uploaded
                if (filePart != null)
                {
// get the file
                                File
                        file = ( (FilePartFile) filePart).getFile();

                        getLogger ().debug ("uploaded file: " + file);

// signal 'success' to sitemap
                        return (Collections.EMPTY_MAP);
                }
                else
                {
                        getLogger ().warn ("upload failed");

// signal 'failure' to sitemap
                        return (null);
                }
        }
}
...


for uploads to work (correctly), some things have to be configured, most
importantly a supporting RequestFactory, e.g. the MultiPartRequestFactory.
have a look at web.xml:

...
<!--
This parameter allows you to select the request factory. Possible choices
are as follows:
  - org.apache.cocoon.components.request.MultipartRequestFactoryImpl
  - org.apache.cocoon.components.request.MaybeUploadRequestFactoryImpl
-->
                <init-param>
                        <param-name>request-factory</param-name>

<param-value>org.apache.cocoon.components.request.MultipartRequestFactoryImp
l</param-value>
                </init-param>
...


then have a form post to an URL:

...
        <form action="upload" method="post" enctype="multipart/form-data">
                <input type="file" name="my-uploaded-file"/>
                <br/>

                <input type="submit"/>
        </form>
...


and handle the request in your sitemap:

...
        <map:match pattern="upload">
                <map:act type="upload">
                        <map:parameter name="parameter-name" value="my-uploaded-file"/>
                </map:act>
        </map:match>
...



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to