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


[EMAIL PROTECTED] 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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>



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 <[EMAIL PROTECTED]>





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 <[EMAIL PROTECTED]>







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


















Reply via email to