Java 将上载文件中的Inputstream从Primefaces转换为字符串

Java 将上载文件中的Inputstream从Primefaces转换为字符串,java,hibernate,primefaces,inputstream,Java,Hibernate,Primefaces,Inputstream,我正在尝试将Primefaces上载文件中的InputStream保存为字符串。 原因是,我不知道如何使用hibernate持久化inputstream 给出了以下代码: public String saveDocumentInDatabase(final UploadedFile pFile) throws IOException{ InputStream inputStream = pFile.getInputstream(); byte[] buffer = new by

我正在尝试将Primefaces上载文件中的InputStream保存为字符串。 原因是,我不知道如何使用hibernate持久化inputstream

给出了以下代码:

public String saveDocumentInDatabase(final UploadedFile pFile) throws IOException{
    InputStream inputStream = pFile.getInputstream();

    byte[] buffer = new byte[8192];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1)
    {
        baos.write(buffer, 0, bytesRead);
    }
    byte[] tmp = baos.toByteArray();
    return new String(tmp, StandardCharsets.UTF_8);
}


public StreamedContent downloadUploadedFile(final JoinExam pJoinExam){
    assertNotNull(pJoinExam.getSavedDocument());

    String tmp = pJoinExam.getSavedDocument().trim();
    java.io.InputStream inputStream = null;
    try {
        inputStream = new ByteArrayInputStream(tmp.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException ex) {
        ex.printStackTrace(System.err);
    }

    return new DefaultStreamedContent(inputStream, "application/pdf",
            "Protocol" + pJoinExam.getPruefling().getMatrNr()+ ".pdf");
}
在我的考试中,我有以下属性

@Lob
@Column
private String savedDocument;
我的注意力是将上传文件的inputStream保存到我的字符串savedDocument中,它应该表示我上传的文件。 当我想下载上传的文件时,我想获取我的savedDocument字符串并将其转换回inputStream。 获得的inputStream将用于创建DefaultStreamedContent 所以我可以下载带有primefaces-Tag的文件

我的问题是,inputstream在转换为字符串时似乎丢失了一些数据,或者字符串在转换回inputstream时似乎丢失了一些数据。 当我下载文件并试图打开它时,会弹出一个错误,说明该文件无法打开

谢谢你的告别


编辑:当我上传和下载.txt文件时,它可以工作,但不能处理pdf文件。

您确定可以将pdf内容存储到@Lob字符串字段中吗?PDF是一个二进制文件,通常使用@Lob byte[]字段处理。表示文件无法打开的错误表示文件已损坏。

是否可以使用hibernate保留byte[]属性?@sergeantSalty是的,但这也取决于数据库,例如Oracle同时具有CLOB和BLOB字段。有关更多信息,请参阅。谢谢大家,它与byteArray完美配合!所以这实际上不是一个问题?