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 17:37:06 GMT
Hi,

the plugin should be activated by a click on the button.

Here is the WikiPage

[{FormSet form='uploadForm'}]
[{MyFormOpen form='uploadForm'}]
[{FormInput type='file' name='uploadInput'}]


[{FormInput type='submit' name='uploadFile' value='Upload'}]
[{FormOutput form='uploadForm' handler='MyPlugin'}]
[{FormClose}]

Best regards
Benedikt


Janne Jalkanen schrieb:
>
> And how do you use this on a page?
>
> /Janne
>
> On 11 Oct 2008, at 14:52, Benedikt Mohrmann wrote:
>
>> 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