2014-09-24 41 views
2

我正在使用Apache Tapestry v5.3.7,並且我已經在表單中使用普通的Tapestry上傳組件。爲了更好的用戶體驗,我現在嘗試將Dropzone.js集成到普通的Tapestry頁面中,而不需要任何形式。 JavaScript集成工作正常。上傳的文件數據通過發佈請求傳輸到我的服務器,我可以通過它的所有參數訪問請求。訪問Apache Tapestry中上傳的文件頁面

我現在的問題是如何訪問上傳文件的二進制數據(可能是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

弄來的懸浮窗工作用掛毯?如果是這樣,你能分享你如何識別上傳的文件嗎?即t:id =「dataFile」等不能完成b/c t:id不能通過任何「輸入」標籤? – labheshr 2016-10-11 19:32:35

+0

@JTurk對不起,但目前我無法以滿意的方式工作: -/ – OkieOth 2016-10-12 07:36:52

回答

0

塔哈有一個博客帖子here在他的掛毯魔術博客,他整合了不同的文件上傳庫掛毯。我猜你的答案會在那裏。

+0

謝謝...我現在將檢查這個:-) – OkieOth 2014-09-25 11:54:11

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這是我怎麼知道,經過filegetFileUpload使解碼器正確解析多/後