2012-02-28 64 views
2

如何使用xPages上傳控件將上傳的文件存儲到本地磁盤?我只是一個簡單的表單,在我的xPages上有文本字段和fileUpload控件(沒有對文檔的綁定,所以我正在訪問xpages組件以便提交它們的值)我如何從我的java代碼訪問這樣上傳的文件?我可以從我的java代碼中獲得這個上傳控件,所以我有'XspFileUpload'對象。但我不能看到任何方式如何訪問原始文件對象,以便能夠將其保存在文件系統上......有人可以幫助我嗎?如何使用xPages上傳控件將上傳的文件存儲到本地文件系統?

回答

2

爲了取回上傳控件的文件,您可以使用這段代碼(所以你需要將其轉換爲SSJS其Java ..)

// get file from httpservletrequest 

HttpServletRequest hsr = (HttpServletRequest) FacesContext  .getCurrentInstance().getExternalContext().getRequest(); 
fileUploadID = 'XspFileUpload control'.getClientId(FacesContext.getCurrentInstance()); 
Map<?, ?> map = hsr.getParameterMap(); 
UploadedFile f = ((UploadedFile) map.get(fileUploadID)); 

if (f == null) { 
    throw new java.lang.Exception("File could not be found"); 
} 

String fileName = f.getServerFileName() 
if (super.isValid() && !this.isHidden()) { 
    File serverFile = f.getServerFile(); 
    if (serverFile != null && serverFile.exists()) { 
     String dir = serverFile.getParent(); 
     File tempFile = new File(dir + File.separator + fileName); // create a handle to the file on server 
    } 
} 
+0

什麼是?我已經嘗試了fileUpload控件ID(就像我在xpage上),但它不起作用,它說它不存在。 – 2012-02-28 14:47:54

+0

找到它。用'XspFileUpload control'替換fileuploadid.getClientId(FacesContext.getCurrentInstance()) – 2012-02-28 15:18:22

+0

Ive更新了我的答案:) – jjtbsomhorst 2012-02-28 15:56:22

0

這是通過使用從答案SSJS寫的代碼jjtbsomhorst和http://xpageswiki.com/web/youatnotes/wiki-xpages.nsf/dx/Work_with_a_file_upload_and_download_controls的代碼

var con = facesContext.getExternalContext(); 
var request:com.sun.faces.context.MyHttpServletRequestWrapper = con.getRequest(); 
var map:java.util.Map = request.getParameterMap(); 
var fileDataName = "view:_id1:file"; 
var fileData:com.ibm.xsp.http.UploadedFile = map.get(fileDataName); 

if (fileData == null) { 
    getComponent("message").value = "File could not be found on " + fileDataName; 
} 

var fileName = fileData.getServerFileName(); 
var serverFile:java.io.File = fileData.getServerFile(); 
if (serverFile != null && serverFile.exists()) { 
    var dir = serverFile.getParent(); 
    var tempFile:java.io.File = new java.io.File(fileName); 
    var correctedFileName = dir + java.io.File.separator + fileData.getClientFileName(); 
    var correctedFile:java.io.File = new java.io.File(correctedFileName); 
    var success = tempFile.renameTo(correctedFile); 
    getComponent("message").value = "Yay!" + correctedFileName; 
    //correctedFile.renameTo(tempFile); 
} 
else { 
    getComponent("message").value = "There's a problem to find the temporal file."; 
} 

PS。在XPage中有一個名爲「message」的標籤。

相關問題