2014-08-29 64 views
0

我有一個Tapestry Web應用程序。 要實現一個支持Ajax文件上傳,我使用如下所示的簡單的JavaScript(我已經評估現有的Tapestry對Ajax的上傳的解決方案,但不能讓他們的工作):Ajax文件上傳在掛毯5.4

var fileSelect = document.getElementById('file-select'); 
var files = fileSelect.files; 
var formData = new FormData(); 
var file = files[0]; 
formData.append("file", file, file.name); 
var xmlhttp; 
if (window.XMLHttpRequest) { 
    xmlhttp=new XMLHttpRequest(); 
} else {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     console.log(xmlhttp.responseText); 
    } 
} 
xmlhttp.open("POST", "FileUpload",true); 
xmlhttp.send(formData); 
} 

而在的FileUpload頁,我有:

@Inject 
private Request request; 

public Object onActivate() { 
String fileName = request.getParameter("file"); 
String path = "c:\\tapestry_temp"; 
File file = new File(path, fileName); 
if (file.exists()) { 
System.out.println("File found"); 
} else { 
System.out.println("File not found"); 
} 
} 
.... 

現在,當我上傳文件時,JavaScript是沒有問題的執行,並在的FileUpload頁面中,文件名具有正確的價值(NAM e的上傳文件),但我不知道如何訪問上傳的文件?它存儲在哪裏?

PS:在的AppModule(ContributeApplicationDefaults),我有事先

configuration.add(UploadSymbols.REPOSITORY_LOCATION,"c:\\tapestry_temp"); 

感謝。

回答

0

問題解決了。

在頁面模板

<input type="file" id="fileUpload" name="fileUpload" /> 
<input type="button" id="fileUploadButton" onclick="return fileUpload();" value="Upload" /> 

JavaScript部分:

var fileSelect = document.getElementById('file_upload"); 
var files = fileSelect.files; 
var file = files[0]; 
var formData = new FormData(); 
formData.append("file", file, file.name); 
xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     if(xmlhttp.responseText == "true") { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 
xmlhttp.open("POST", "Upload",true); 
xmlhttp.setRequestHeader("Content-type","application/pdf"); 
xmlhttp.send(formData); 

,並在上傳頁:

@Inject 
private RequestGlobals requestGlobals; 

public Object onActivate() { 
    try { 
     InputStream input = requestGlobals.getHTTPServletRequest().getInputStream(); 
     ... 
     FileOutputStream output = new FileOutputStream(pdfFile); 

     final int BUFFER_SIZE = 1024; 
     byte[] buffer = new byte[BUFFER_SIZE]; 
     while (true) { 
      count = input.read(buffer); 
      if (count == -1) { 
       break; 
      } 
      output.write(buffer, 0, count); 
     } 
     input.close(); 
     output.close(); 
     ....