您需要使用com.ibm.xsp.component.UIFileuploadEx.UploadedFile类在 bean 中创建 getter 和 setter :
private UploadedFile uploadedFile;
public UploadedFile getFileUpload() {
return uploadedFile;
}
public void setFileUpload( UploadedFile to ) {
this.uploadedFile = to;
}
在处理 bean 数据的函数(例如保存函数)中,您可以通过检查对象是否为空来检查文件是否已上传。如果它不为空,则文件已上传。
要处理上传的文件,首先使用 getServerFile() 方法获取com.ibm.xsp.http.IUploadedFile对象的实例。该对象有一个 getServerFile() 方法,该方法返回上传文件的 File 对象。该对象的问题在于它有一个神秘的名称(可能是为了处理多个人同时上传具有相同名称的文件)。可以使用IUploadedFile 类的getClientFileName()方法检索原始文件名。
然后我倾向于将神秘文件重命名为其原始文件名,对其进行处理(将其嵌入富文本字段或对其进行其他操作),然后将其重命名回其原始(神秘)名称。最后一步很重要,因为只有在代码完成后才会清理(删除)文件。
以下是上述步骤的示例代码:
import java.io.File;
import com.ibm.xsp.component.UIFileuploadEx.UploadedFile;
import com.ibm.xsp.http.IUploadedFile;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.RichTextItem;
import com.ibm.xsp.extlib.util.ExtLibUtil; //only used here to get the current db
public void saveMyBean() {
if (uploadedFile != null ) {
//get the uploaded file
IUploadedFile iUploadedFile = uploadedFile.getUploadedFile();
//get the server file (with a cryptic filename)
File serverFile = iUploadedFile.getServerFile();
//get the original filename
String fileName = iUploadedFile.getClientFileName();
File correctedFile = new File( serverFile.getParentFile().getAbsolutePath() + File.separator + fileName );
//rename the file to its original name
boolean success = serverFile.renameTo(correctedFile);
if (success) {
//do whatever you want here with correctedFile
//example of how to embed it in a document:
Database dbCurrent = ExtLibUtil.getCurrentDatabase();
Document doc = dbCurrent.createDocument();
RichTextItem rtFiles = doc.createRichTextItem("files");
rtFiles.embedObject(lotus.domino.EmbeddedObject.EMBED_ATTACHMENT, "", correctedFile.getAbsolutePath(), null);
doc.save();
rtFiles.recycle();
doc.recycle();
//if we're done: rename it back to the original filename, so it gets cleaned up by the server
correctedFile.renameTo( iUploadedFile.getServerFile() );
}
}
}