访问Apache Tapestry页面中的上传文件

时间:2014-09-24 11:07:33

标签: java file-upload tapestry dropzone.js

我使用Apache Tapestry v5.3.7并且我已经在表单中使用了普通的Tapestry上传组件。为了获得更好的用户体验,我现在尝试将Dropzone.js集成到普通的Tapestry页面中,而不使用任何形式。 JavaScript集成工作正常。上传的文件数据通过发布请求传输到我的服务器,我可以使用其所有参数访问请求。

我现在的问题是如何访问上传文件的二进制数据(可能是InputStream)以将其保存在我的系统中?我已经注入了http请求,但getInputStream返回一个空流。

感谢您的任何建议

/** Code snippet of page java part */
...

@Inject
protected HttpServletRequest _request;

public void onActivate (String rowId) {
    String fileName=_request.getParameter("file");
    try {
        InputStream is=_request.getInputStream();
        // if I do read from is it returns -1
        // :-(
        doSomeSaveStuff(is); // dummy code
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

...

2 个答案:

答案 0 :(得分:1)

以下是一种方法:

在模板中:

<t:form t:id="testForm" class="dropzone"> </t:form>

在page.java中

  @Inject
  MultipartDecoder multipartDecoder;

  @Component(id = "testForm")
  private Form testForm;

  @Inject
  RequestGlobals requestGlobals;

void onSubmitFromTestForm() throws ManagerException {
    System.out.println("test form invoked");
    HttpServletRequest r = requestGlobals.getHTTPServletRequest();
    UploadedFile u = multipartDecoder.getFileUpload("file");

上传的文件包含您上传的内容,您可以按照自己的方式使用它。

注意:HttpServletRequest::getParameterMap()告诉我该文件的句柄名为file,我知道将file传递给getFileUpload会使解码器正确解析multipart / post

答案 1 :(得分:0)

Taha在他的Tapestry Magic博客上发表了一篇博文here,他在Tapestry中整合了一个不同的文件上传器库。我猜你的答案就在那里。