Как сохранить загруженный файл в локальную файловую систему с помощью управления загрузкой xPages?

Как сохранить загруженный файл на локальный диск с помощью управления загрузкой xPages? У меня есть простая форма с текстовым полем и элементом управления fileUpload на моих xPages (нет привязки к документу, поэтому я обращаюсь к компонентам xpages, чтобы получить их значения при отправке). Как я могу получить доступ к такому загруженному файлу из моего java-кода? Я могу получить этот элемент управления загрузкой из своего java-кода, поэтому у меня есть объект XspFileUpload. Но я не вижу способа получить доступ к необработанному объекту File, чтобы сохранить его в файловой системе ... Может ли кто-нибудь помочь мне с этим?


person David Marko    schedule 28.02.2012    source источник


Ответы (2)


Чтобы получить файл из элемента управления загрузкой, вы можете использовать этот фрагмент кода (это java, поэтому вам нужно преобразовать его в ssjs..)

// 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 
   }
}
person jjtbsomhorst    schedule 28.02.2012
comment
Что такое ‹fileuploadid›? Я попробовал идентификатор элемента управления fileUpload (как у меня на xpage), но он не работает, он говорит, что не существует. - person David Marko; 28.02.2012
comment
Нашел. Замените fileuploadid на «XspFileUpload control».getClientId(FacesContext.getCurrentInstance()) - person David Marko; 28.02.2012

Это код 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 есть метка с именем «сообщение».

person Mario S    schedule 22.08.2014
comment
Можно ли получить mimetype serverFile с помощью ssjs? - person Muhammed Ismail Carrim; 29.03.2021