gpt4 book ai didi

java - 如何通过 XPages Java Bean 上传和保存附件

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:42 25 4
gpt4 key购买 nike

我了解了如何使用表达式语言将 XPage 控件绑定(bind)到 Java Bean。然后它会自动访问 setter 和 getter。

但是您如何处理文件附件呢?

那看起来像什么?我希望能够将文件上传控件绑定(bind)到 bean。将附件保存到“任何”文档...无论是当前文档还是外部文档...bean 应该能够处理该逻辑。

我想我不知道如何将该文件附件放入内存 bean 中以便能够对其执行任何操作,例如保存到文档中。

如有任何建议,我们将不胜感激。

更新:这是一个类似的问题:How to store uploaded file to local file system using xPages upload control?

但是在那个问题中,用户想要保存到本地磁盘。我正在寻找保存到文档。

谢谢!

最佳答案

您需要使用 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() );
}


}
}

关于java - 如何通过 XPages Java Bean 上传和保存附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com