代码之家  ›  专栏  ›  技术社区  ›  sergeantSalty

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

  •  0
  • sergeantSalty  · 技术社区  · 7 年前

    我正在尝试保存Primefaces的输入流 UploadedFile 变成一个字符串。 原因是,我不知道如何使用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 ,它应该“表示”我上载的文件。 当我想下载我的“上传文件”时,我想 保存文档 字符串并将其转换回inputStream。 实现的inputStream将用于创建 DefaultStreamedContent 所以我可以下载primefaces文件 <p:fileDownload /> -标记。

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

    谢谢你的问候

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Karol Dowbecki    7 年前

    是否确实可以将PDF内容存储到 @Lob String 领域PDF是一个二进制文件,通常使用 @Lob byte[] 领域表示文件无法打开的错误表示文件已损坏。