当前位置: 首页 > 面试题库 >

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

陶沛
2023-03-14
问题内容

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

但是,如何处理文件附件?

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

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

任何意见,将不胜感激。

谢谢!


问题答案:

您需要使用 com.ibm.xsp.component.UIFileuploadEx.UploadedFile 类在Bean中创建吸气剂和吸气剂:

private UploadedFile uploadedFile;

public UploadedFile getFileUpload() {
    return uploadedFile;
}
public void setFileUpload( UploadedFile to ) {
    this.uploadedFile = to;
}

在处理Bean数据的函数中(例如,保存函数),可以通过检查对象是否为空来检查文件是否已上传。如果不为null,则上传文件。

要处理该上载的文件,请首先使用getServerFile()方法获取 com.ibm.xsp.http.IUploadedFile
对象的实例。该对象具有getServerFile()方法,该方法返回上载文件的File对象。该对象的问题在于它具有一个隐秘的名称(可能要处理多个人同时上传具有相同名称的文件)。可以使用IUploadedFile类的
getClientFileName() 方法检索原始文件名。

然后,我倾向于将重命名文件重命名为其原始文件名,进行处理(将其嵌入到RTF中或对其进行其他处理),然后将其重命名为其原始(重命名)。最后一步很重要,因为只有在代码完成后才清理(删除)文件。

这是上述步骤的示例代码:

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() );
        }


    }
 }


 类似资料:
  • 问题内容: 我有一些使用Tyre gem在Elasticsearch中建立索引的PDF附件。一切都很好,但是我将拥有许多GB的PDF,我们可能会将PDF存储在S3中以进行访问。现在,base64编码的PDF存储在Elasticsearch _source中,这将使索引很大。我想对附件建立索引,但不进行存储,并且我还没有弄清楚正确的方法可以放入Tire的“映射”块中以防止它出现。现在的代码块是这样的

  • 问题内容: 在过去的几天里,我一直在努力用jQuery和AJAX提交表单。我面临的问题是在表单字段中上传图像。 我的表格是这样的: 我的用于获取表单值的jQuery脚本如下所示: 但是,如果image返回null,则返回除image 1以外的所有字段值。 如何存储在数据数组中? 我要存储,以便可以通过AJAX将值发送到服务器。 问题答案: 对于上传单个图像,像这样 对于多张图片,您将不得不循环不同

  • 问题内容: 我正在使用此代码上传文件(图像到文件夹) 当文件(图像)保存在指定路径时…如果我想用某个所需的名称保存文件…。 我曾尝试更换此 有了这个 但是它不起作用 问题答案: 你可以试试看

  • 问题内容: 我有一个简单的日志记录应用程序,可将数据收集到三个数组列表中,我想将其保存到CSV文件中,然后共享给Google云端硬盘,电子邮件等。 这是我保存数据的方式: 这只是将我的ArrayLists组合成一个字符串,并使用名称比例将数据保存到csv文件中。 这是我尝试分享的方式: 当我在电子邮件中尝试此操作时,没有附件,只有正文。当我尝试使用Google云端硬盘时,只会将正文保存到文本文件中

  • 问题内容: 我正在尝试存储一个Integer并使用KeyChain对其进行检索。 这是我如何保存它: 这是我尝试检索它的方式: 我收到以下错误: 无法将类型’__NSCFNumber’的值强制转换为’NSString’ 我尝试使用变量,但没有成功。 问题答案: 好吧,我只是用光了源代码等,并做了自己的好帮手:尽情享受吧!