有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java访问Apache Tapestry页面中上载的文件

我正在使用apachetapestryv5。我已经在表单中使用了普通的Tapestry上载组件。为了获得更好的用户体验,我现在尝试集成Dropzone。js在普通Tapestry页面中没有任何形式。JavaScript集成工作正常。上传的文件数据通过post请求传输到我的服务器,我可以访问该请求及其所有参数

我现在的问题是如何访问上传文件的二进制数据(可能作为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();
    }
}

...

共 (1) 个答案

  1. # 1 楼答案

    这里有一种方法:

    在模板中:

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

    在第页。爪哇

      @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可以使解码器正确解析多部分/post的原因