【问题标题】:Convert Inputstream from an UploadedFile from Primefaces to a String将来自 Primefaces 的 UploadedFile 的 Inputstream 转换为字符串
【发布时间】:2018-03-10 23:15:15
【问题描述】:

我正在尝试将 Primefaces UploadedFile 中的 InputStream 保存到字符串中。 这样做的原因是,我不知道如何使用 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 保存到我的String savedDocument 中,它应该“代表”我上传的文件。 当我想下载我的“上传文件”时,我想获取我的savedDocument String 并将其转换回 inputStream。 实现的 inputStream 将用于创建一个DefaultStreamedContent 所以我可以下载带有 primefaces <p:fileDownload /> -Tag 的文件。

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

感谢您的建议

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

【问题讨论】:

  • 所以这实际上不是 PrimeFaces 问题?

标签: java hibernate primefaces inputstream


【解决方案1】:

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

【讨论】:

  • 是否可以使用 hibernate 持久化 byte[] 属性?
  • @sergeantSalty 是的,但它也取决于数据库,例如Oracle 有 CLOBBLOB 字段。请参阅stackoverflow.com/a/3739047/1602555 了解更多信息。
  • 谢谢你们,它与 byteArray 完美配合!
猜你喜欢
  • 2017-07-28
  • 2013-08-31
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2018-11-05
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多