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 Mon, 13 Oct 2008 10:13:32 GMT
Hi,

does anyone have a clue, how to solve this problem?

Best regards
Benedikt


Benedikt Mohrmann schrieb:
> Hi,
>
> here is the resulting HTML code:
>
> <div class="wikiform">
> <form action="Wiki.jsp?page=MyTest" name="uploadForm" 
> accept-charset="UTF-8" method="post" enctype="multipart/form-data">
>  <input type="hidden" name="formname" value="uploadForm"/>
>
> <input name='nbf_uploadInput' type='file' value=''/>
>
> </p>
> <p />
> <p><input name='nbf_uploadFile' type='submit' value='Upload'/>
>
> </form>
> </div>
>
> Regards
> Benedikt
>
>
> Janne Jalkanen schrieb:
>> And could you also provide the HTML code resulting from this invocation?
>>
>> /Janne
>>
>> On 11 Oct 2008, at 20:37, Benedikt Mohrmann wrote:
>>
>>> 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