Java 将上载文件中的Inputstream从Primefaces转换为字符串
我正在尝试将Primefaces上载文件中的InputStream保存为字符串。 原因是,我不知道如何使用hibernate持久化inputstream 给出了以下代码: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
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完美配合!所以这实际上不是一个问题?