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 Sun, 12 Oct 2008 07:45:09 GMT
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