java - 将来自 Primefaces 的 UploadedFile 的输入流转换为字符串

标签 java hibernate primefaces inputstream

我正在尝试从 Primefaces 保存输入流 UploadedFile成一个字符串。 原因是,我无法弄清楚如何使用 hibernate 来持久保存输入流。

给出以下代码:

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

在我的 JoinExam 中,我有以下属性。

@Lob
@Column
private String savedDocument;

我的注意力是将uploadedFile的inputStream保存到我的字符串中savedDocument ,它应该“代表”我上传的文件。 当我想下载我的“上传的文件”时,我想获取我的savedDocument String 并将其转换回 inputStream。 获得的inputStream将用于创建DefaultStreamedContent 这样我就可以下载包含 primefaces <p:fileDownload /> 的文件-标签。

我的问题是,输入流在转换为字符串时似乎丢失了一些数据,或者字符串在转换回输入流时似乎丢失了一些数据。 当我下载该文件并尝试打开它时,弹出错误,提示无法打开该文件。

感谢您的建议

编辑:当我上传和下载 .txt 文件时,它可以工作,但不能与 pdf 文件一起使用。

最佳答案

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

关于java - 将来自 Primefaces 的 UploadedFile 的输入流转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49214992/

相关文章:

java - 日历不弹出 PrimeFaces

java - 打开转换 java.net.SocketException : Permission denied

java - Hibernate SQL执行日志

java - 无法从jsf页面将数据表导出到excel

java - JSF:禁用组件时,其值不会进入请求映射参数。有解决方法吗?

java - hibernate查询缓存和时间戳

Java .Net 互操作。 Axis java.util.Map

java - 识别两条线的交点

java - 仅验证数字字符 Java

java - Oracle 表被 Hibernate 丢弃;从回收站闪回到DB。出现错误 "SQL Error: 942, SQLState: 42000"