incubator-jspwiki-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benedikt Mohrmann <mohrm...@mail.upb.de>
Subject Re: VS: Re: Upload Question
Date Sat, 11 Oct 2008 11:52:30 GMT
Hi,

the plugin is quite easy:
public class MyPlugin implements WikiPlugin {

    @Override
    public String execute(WikiContext context, Map params) throws 
PluginException {
       
        HttpServletRequest request = context.getHttpRequest();
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
       
        // Create a factory for disk-based file items
        FileItemFactory factory = new DiskFileItemFactory();

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        // Parse the request
        List<FileItem> items = null;
        try {
            items = upload.parseRequest(request);
        } catch (Exception e) {
            // TODO Auto-generated catch block
           
            return "BUG";
        }
       
        boolean empty = items.isEmpty();
        String valueOf = String.valueOf(empty);


        return valueOf + "Works";
    }
}

As I said, when I hit the submitButton nothing happens.

Best regards
Benedikt


jalkanen@ecyrd.com schrieb:
> Hi!
>
> I think we might need to see the code. Can you post it to the list, please?
>
> /janne
>
> -- alkuper. viesti --
> Aihe: Re: Upload Question
> Lähettäjä: Benedikt Mohrmann <mohrmann@mail.upb.de>
> Päivämäärä: 11.10.2008 12:42
>
> Hi,
>
> I did all this.
> The HTML output is how it should be, but the request is not handled when 
> I hit the button.
>
> The WikiSite:
> [{FormSet form='uploadForm'}]
> [{MyFormOpen form='uploadForm'}]
> [{FormInput type='file' name='uploadInput'}]
>
>
> [{FormInput type='submit' name='uploadFile' value='Upload'}]
> [{FormOutput form='uploadForm' handler='MyPlugin'}]
> [{FormClose}]
>
> To test it I wrote a plugin which justs returns "Works".
> Now when I switch to the normal FormOpen tag ([{FormOpen 
> form='uploadForm'}]) the output is "Works".
> When I use my own one, there is no output.
>
> Any ideas, why this is not handled?
>
> Best regards
> Benedikt
>
>
> Janne Jalkanen schrieb:
>   
>> They are real plugins.
>>
>> I recommend that you copy FormOpen.java to MyFormOpen.java, rename the 
>> class, change the code, and then use [{MyFormOpen}] instead of 
>> [{FormOpen}] in the plugins that you need.
>>
>> You can easily write your own plugin which does what you said:
>>
>> package whatever.package.you.use;
>>
>> public class MyPlugin implements WikiPlugin
>> {
>>    public String execute(WikiContext ctx, Map params)
>>    {
>>           returnStringBuffer.append("<div class=\"wikiform\">");
>>           returnStringBuffer.append("<form 
>> action=\"Wiki.jsp?page=MyTest\" name=\"uploadForm\" 
>> accept-charset=\"UTF-8\" method=\"post\"                   
>> enctype=\"multipart/form-data\">");
>>        returnStringBuffer.append("<input type=\"hidden\" 
>> name=\"formname\" value=\"uploadForm\"/>");
>>        returnStringBuffer.append("<input name=\"nbf_Datei\" 
>> type=\"file\"><input type=\"submit\" name=\"nbf_upload\" id=\"upload\" 
>> value=\"Hochladen\" />");
>>
>>       return returnStringBuffer.toString();
>>     }
>> }
>>
>> then use [{whatever.package.you.use.MyPlugin}] on a wikipage.  I don't 
>> know what it does, but it is easy :-)
>>
>> /Janne
>>
>> On Oct 10, 2008, at 16:16 , Benedikt Mohrmann wrote:
>>
>>     
>>> Hi,
>>>
>>> the problem is that the Forms are directly in the JSPWiki.jar file.
>>> Thus they are no real plugins I guess.
>>> I tried to change the FormOpen.java and inserted
>>>        tag.append( "\" method=\""+method+"\" 
>>> enctype=\"multipart/form-data\">\n" );
>>> then build the class file and just put it into the JSPWiki.jar.
>>>
>>> As a result all the other plugins which use forms were not working 
>>> correctly (that was of course clear).
>>> But my Upload Plugin did not work, too.
>>> When I hit the submit button nothing happened.
>>>
>>> Is there no possibility to insert a plugin which creates HTML code 
>>> the following way:
>>>        returnStringBuffer.append("<div class=\"wikiform\">");
>>>        returnStringBuffer.append("<form 
>>> action=\"Wiki.jsp?page=MyTest\" name=\"uploadForm\" 
>>> accept-charset=\"UTF-8\" method=\"post\" 
>>> enctype=\"multipart/form-data\">");
>>>        returnStringBuffer.append("<input type=\"hidden\" 
>>> name=\"formname\" value=\"uploadForm\"/>");
>>>        returnStringBuffer.append("<input name=\"nbf_Datei\" 
>>> type=\"file\"><input type=\"submit\" name=\"nbf_upload\" 
>>> id=\"upload\" value=\"Hochladen\" />");
>>>
>>> Then just integrate the plugin into the WikiPage.
>>>
>>> And then put a second plugin via [{FormOutput form='uploadForm' 
>>> handler='MyPlugin'}] into the WikiPage?
>>>
>>> At the moment this seems not to work, as nothing happens when I click 
>>> on the submit button.
>>>
>>> Best regards
>>> Benedikt
>>>
>>>
>>> Janne Jalkanen schrieb:
>>>       
>>>> Probably the quickest way for you now is to simply make a copy of the
>>>> relevant Form plugin, name it something else, and just change the
>>>> enctype.
>>>>
>>>> Also please put in a JIRA request for the enctype to be changeable,
>>>> and we'll snatch it in either 2.8.1 or 3.0.
>>>>
>>>> /Janne
>>>>
>>>> On Fri, Oct 10, 2008 at 10:50:32AM +0200, Benedikt Mohrmann wrote:
>>>>
>>>>         
>>>>> Hi,
>>>>>
>>>>> just checked it again.
>>>>> The problem is definetely the form:
>>>>> org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException:

>>>>> the request doesn't contain a multipart/form-data or 
>>>>> multipart/mixed stream, content type header is 
>>>>> application/x-www-form-urlencoded
>>>>>
>>>>> Pretty bad that you can not change the enctype.
>>>>> In the Wiki Src it is:
>>>>> tag.append( "\" method=\""+method+"\" 
>>>>> enctype=\"application/x-www-form-urlencoded\">\n" );
>>>>>
>>>>> Can't I just change this?
>>>>>
>>>>> Another way could be to write a plugin with the following code 
>>>>> (snippet):
>>>>>        returnStringBuffer.append("<div class=\"wikiform\">");
>>>>>        returnStringBuffer.append("<form 
>>>>> action=\"Wiki.jsp?page=MyTest\" name=\"uploadForm\" 
>>>>> accept-charset=\"UTF-8\" method=\"post\" 
>>>>> enctype=\"multipart/form-data\">");
>>>>>        returnStringBuffer.append("<input type=\"hidden\" 
>>>>> name=\"formname\" value=\"uploadForm\"/>");
>>>>>        returnStringBuffer.append("<input name=\"nbz_Datei\" 
>>>>> type=\"file\"><input type=\"submit\" name=\"nbz_upload\" 
>>>>> id=\"upload\" value=\"Hochladen\" />");
>>>>>        returnStringBuffer.append("</form></div>");
>>>>>
>>>>> This would create a form, but how can I tell the Wiki which plugin 
>>>>> to use, when the button is hit?
>>>>>
>>>>> Regards
>>>>> Benedikt
>>>>>
>>>>>
>>>>> Janne Jalkanen schrieb:
>>>>>
>>>>>           
>>>>>> I think it is important to look into the cause... The stack trace

>>>>>> would be important, yes.  There could be many things failing.
>>>>>>
>>>>>> /Janne
>>>>>>
>>>>>> On Oct 9, 2008, at 19:15 , Harry Metske wrote:
>>>>>>
>>>>>>
>>>>>>             
>>>>>>> I think so too (multipart/form-data), but can you print the 
>>>>>>> stacktrace just
>>>>>>> before returning " BUG" , maybe you'll get a clue then ?
>>>>>>>
>>>>>>> The FormOpen class currently has a hardcoded
>>>>>>> "application/x-www-form-urlencoded", I think this should be 
>>>>>>> parameterizable
>>>>>>> with the current value as the default.
>>>>>>>
>>>>>>>
>>>>>>> regards,
>>>>>>> Harry
>>>>>>>
>>>>>>>
>>>>>>> 2008/10/9 Benedikt Mohrmann <mohrmann@mail.upb.de>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I tried a few things already, but did not get it to work
so far.
>>>>>>>>
>>>>>>>> At first I created a new site, which contains:
>>>>>>>> [{FormSet form='searchForm'}]
>>>>>>>> [{FormOpen form='searchForm'}]
>>>>>>>> [{FormInput type='file' name='searchInput'}]
>>>>>>>>
>>>>>>>> [{FormInput type='submit' name='submit' value='Submit'}]
>>>>>>>> [{FormClose}]
>>>>>>>> [{FormOutput form='searchForm' handler='MyTest2'}]
>>>>>>>>
>>>>>>>> Thus there is only a form where you can upload your data.
>>>>>>>>
>>>>>>>> The Plugin contains the following code (at this time really

>>>>>>>> simple, just to
>>>>>>>> check if it works):
>>>>>>>> public class MyTest2 implements WikiPlugin {
>>>>>>>>
>>>>>>>>  @Override
>>>>>>>>  public String execute(WikiContext context, Map params) throws
>>>>>>>> PluginException {
>>>>>>>>            HttpServletRequest request = context.getHttpRequest();
>>>>>>>>      boolean isMultipart = 
>>>>>>>> ServletFileUpload.isMultipartContent(request);
>>>>>>>>            // Create a factory for disk-based file items
>>>>>>>>      FileItemFactory factory = new DiskFileItemFactory();
>>>>>>>>
>>>>>>>>      // Create a new file upload handler
>>>>>>>>      ServletFileUpload upload = new ServletFileUpload(factory);
>>>>>>>>
>>>>>>>>      // Parse the request
>>>>>>>>      List<FileItem> items = null;
>>>>>>>>      try {
>>>>>>>>          items = upload.parseRequest(request);
>>>>>>>>      } catch (Exception e) {
>>>>>>>>          // TODO Auto-generated catch block
>>>>>>>>          return "BUG";
>>>>>>>>      }
>>>>>>>>      return "Works";
>>>>>>>>  }
>>>>>>>> }
>>>>>>>>
>>>>>>>> So far I always get the "BUG" output when I choose a file
and 
>>>>>>>> hit the
>>>>>>>> submitbutton.
>>>>>>>> One problem could be that when I take a look at the produced

>>>>>>>> HTML code, the
>>>>>>>> form is introduced with:
>>>>>>>>
>>>>>>>> <form action="Wiki.jsp?page=MyTest" name="searchForm"
>>>>>>>> accept-charset="UTF-8" method="post"
>>>>>>>> enctype="application/x-www-form-urlencoded">
>>>>>>>>
>>>>>>>> I think it should be the enctype: multipart/form-data
>>>>>>>> But I don't know if that is the point.
>>>>>>>>
>>>>>>>> Any other ideas?
>>>>>>>>
>>>>>>>>
>>>>>>>> Best regards
>>>>>>>> Benedikt
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Harry Metske schrieb:
>>>>>>>>
>>>>>>>>
>>>>>>>>                 
>>>>>>>>> my previous answer was a bit too much in a hurry....
>>>>>>>>>
>>>>>>>>> first your compile, Eclipse tells you there is no method

>>>>>>>>> getHttpRequest
>>>>>>>>> for
>>>>>>>>> a wiki context, that is strange, looking at the source
it does 
>>>>>>>>> have it :
>>>>>>>>>
>>>>>>>>> ........
>>>>>>>>>   /**
>>>>>>>>>    *  If the request did originate from a HTTP request,
>>>>>>>>>    *  then the HTTP request can be fetched here.  However,
it 
>>>>>>>>> the request
>>>>>>>>>    *  did NOT originate from a HTTP request, then this
method will
>>>>>>>>>    *  return null, and YOU SHOULD CHECK FOR IT!
>>>>>>>>>    *
>>>>>>>>>    *  @return Null, if no HTTP request was done.
>>>>>>>>>    *  @since 2.0.13.
>>>>>>>>>    */
>>>>>>>>>   public HttpServletRequest getHttpRequest()
>>>>>>>>>   {
>>>>>>>>>       return m_request;
>>>>>>>>>   }
>>>>>>>>> .......
>>>>>>>>>
>>>>>>>>> and if you can't compile it, I shouldn't even try to
run it.
>>>>>>>>> Maybe you can reply the complete source of your plugin
?
>>>>>>>>>
>>>>>>>>> regards,
>>>>>>>>> Harry
>>>>>>>>>
>>>>>>>>> 2008/10/8 Benedikt Mohrmann <mohrmann@mail.upb.de>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>                   
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> thanks for your answer- I already had a look at commons

>>>>>>>>>> fileupload.
>>>>>>>>>> But the problem is, when I use:
>>>>>>>>>>
>>>>>>>>>> HttpServletRequest request = context.getHttpRequest();
>>>>>>>>>>
>>>>>>>>>> JSPWiki tells me
>>>>>>>>>>
>>>>>>>>>> HttpServletRequest cannot be resolved to a type
>>>>>>>>>> The type javax.servlet.http.HttpServletRequest cannot
be 
>>>>>>>>>> resolved.
>>>>>>>>>>
>>>>>>>>>> In addition I am implementing my plugin in Eclipse
and it 
>>>>>>>>>> tells me that
>>>>>>>>>> there is no method getHttpRequest for a wiki context.
>>>>>>>>>>
>>>>>>>>>> Best regards
>>>>>>>>>> Benedikt
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Harry Metske schrieb:
>>>>>>>>>>
>>>>>>>>>> Benedikt,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>                     
>>>>>>>>>>> in your plugin you have access to the HttpServletRequest
(
>>>>>>>>>>> HttpServletRequest request = context.getHttpRequest();
) .
>>>>>>>>>>> Once you have this, I think you can use many
samples/tools to 
>>>>>>>>>>> handle the
>>>>>>>>>>> uploaded file, but maybe the best one is commons
fileupload (
>>>>>>>>>>> http://commons.apache.org/fileupload/using.html),
this binary 
>>>>>>>>>>> jar is
>>>>>>>>>>> already
>>>>>>>>>>> in the JSPWiki distribution.
>>>>>>>>>>>
>>>>>>>>>>> regards,
>>>>>>>>>>> Harry
>>>>>>>>>>>
>>>>>>>>>>> 2008/10/7 Benedikt Mohrmann <mohrmann@mail.upb.de>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>                       
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> my intention is to upload a file via JSPWiki,
but not as an 
>>>>>>>>>>>> attachment.
>>>>>>>>>>>>
>>>>>>>>>>>> I am trying to upload a file, thus I created
a form 
>>>>>>>>>>>> containing a file
>>>>>>>>>>>> chooser and a submitbutton.
>>>>>>>>>>>> The goal is, that the input file is transferred
to the 
>>>>>>>>>>>> server and then
>>>>>>>>>>>> handled by a plugin I wrote.
>>>>>>>>>>>>
>>>>>>>>>>>> The plugin just puts the file as a Serializable
into a 
>>>>>>>>>>>> database (which
>>>>>>>>>>>> already works, when I read a file from my
harddisk).
>>>>>>>>>>>> But I am not yet not able to transfer the
content of the 
>>>>>>>>>>>> file as a
>>>>>>>>>>>> stream
>>>>>>>>>>>> or something like that.
>>>>>>>>>>>>
>>>>>>>>>>>> Any experiences how this could work?
>>>>>>>>>>>>
>>>>>>>>>>>> Best regards
>>>>>>>>>>>> Benedikt
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>                         
>>>>>>>>>>>
>>>>>>>>>>>                       
>>>>>>>>>
>>>>>>>>>                   
>
>   


Mime
View raw message