Hi All,

Thank you for all your answers, I've read the form specification (
http://www.w3.org/TR/html4/interact/forms.html)
and then I looked into Tapestry's upload component! I understand this
component and forms much better now.
Again, my goal is: An upload form that uploads files and stores it in
GAE(BLOB) with Tapestry5!


I've made my own ServletFilter, with an own MultipartDecodeImpl and a
request which decodes the form before passing it to the page Class.
I've pretty much used a lot of aspects of the Upload component.
But instead of making a new component, I've handled everything in my own
MultpartDecoder and filter!

The problem right now is, that I get an exception: after passing the handler
to the chain!
java.util.zip.ZipException: Not in GZIP format



It looks like I've forgot to zip something? But I don't know what, why and
where?




###################################   This is My RequestFilter

public class MyProjectUploadFilter implements HttpServletRequestFilter {

@Inject

private Logger logger;



private final MyProjectMultipartDecoder decoder;

private final String method = "post";

/**

* Part of HTTP content type header.

*/

public static final String MULTIPART = "multipart/";


public MyProjectUploadFilter(MyProjectMultipartDecoder decoder) {

this.decoder = decoder;

}


@Override

public boolean service(HttpServletRequest request, HttpServletResponse
response, HttpServletRequestHandler handler) throws IOException {

if (method.equalsIgnoreCase(request.getMethod()) ) {

HttpServletRequest newRequest = ServletFileUpload.isMultipartContent(request)
? decoder.decode(request) : request;

return handler.service(newRequest, response);

}

return handler.service(request, response);

}


}


################# This is my MultpartdecoderImpl


public class MyProjectMultipartDecoderImpl implements
MyProjectMultipartDecoder {

private final Map<String, Blob> uploads = CollectionFactory.newMap();

private final Logger logger;

private final FileItemFactory fileItemFactory;

//

// private final long maxRequestSize;

//

private final long maxFileSize = 250000;


private final String requestEncoding;


private FileUploadException uploadException;


public MyProjectMultipartDecoderImpl(Logger log, FileItemFactory
fileItemFactory) {

this.logger = log;

this.fileItemFactory = fileItemFactory;

this.requestEncoding = "UTF-8";

}


@Override

public HttpServletRequest decode(HttpServletRequest request) {

try {

request.setCharacterEncoding(requestEncoding);

} catch (UnsupportedEncodingException ex) {

throw new RuntimeException(ex);

}

FileItemIterator fileItems = parseRequest(request);


return processFileItems(request, fileItems);

}


@Override

public Blob getFileUpload(String parameterName) {

return uploads.get(parameterName);

}


@Override

public FileUploadException getUploadException() {

return uploadException;

}




protected FileItemIterator parseRequest(HttpServletRequest request) {


try {

return createFileUpload().getItemIterator(request);

} catch (FileUploadException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}


protected ServletFileUpload createFileUpload() {

ServletFileUpload upload = new ServletFileUpload(fileItemFactory);


// // set maximum file upload size

// upload.setSizeMax(maxRequestSize);

upload.setFileSizeMax(maxFileSize);


return upload;

}


protected HttpServletRequest processFileItems(HttpServletRequest request,
FileItemIterator fileItems) {

if (uploadException == null && (fileItems == null)) {

return request;

}

ParametersServletRequestWrapper wrapper = new
 ParametersServletRequestWrapper(request);


try {

for (FileItemIterator it = fileItems; it.hasNext();) {

FileItemStream item;

item = it.next();

if (item.isFormField()) {

wrapper.addParameter(item.getFieldName(), item.getFieldName());

} else {

logger.debug("########" + item.getName());

logger.debug("########" + item.getFieldName());

wrapper.addParameter(item.getFieldName(), item.getName());



}

}

} catch (FileUploadException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


return wrapper;

}


protected void addUploadedFile(String name, Blob file) {

uploads.put(name, file);

}

}


################################ THIS IS MY FORM

<html t:type="layout"

title="${message:title}"

      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";

      xmlns:p="tapestry:parameter">

    <p>Post a new product:</p>

     <t:form t:id="upload" method="POST" >

        <t:errors/>

        <t:beaneditor t:id="product" object="product" />

        <br/><br/>

        <input type="file" id="ga" name="file"/>


        <br/><br/>

        <input t:type="submit" t:id="button" t:value="message:button-label"
/>



    </t:form>

</html>




#################################### THIS IS MY EXCEPTION

   -
      - Triggering event 'action' on personal/AddProduct:upload
   - org.apache.tapestry5.runtime.ComponentEventException
   java.util.zip.ZipException: Not in GZIP format


On 9 April 2011 16:31, Taha Hafeez <tawus.tapes...@gmail.com> wrote:

>
> If you can use an ajax file uploader then you can modify this to meet your
> needs
>
>
> http://tapestry.1045711.n5.nabble.com/Tapestry-FileUploader-Integration-td4268987.html
>
> regards
> Taha
>
> --
> View this message in context:
> http://tapestry.1045711.n5.nabble.com/Setting-contenttype-of-T5-form-tp4270175p4292978.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to