我使用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();
}
}
...
答案 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中整合了一个不同的文件上传器库。我猜你的答案就在那里。