将 Inputstream 从 Primefaces 的 UploadedFile 转换为字符串
Convert Inputstream from an UploadedFile from Primefaces to a String
我正在尝试将来自 Primefaces UploadedFile
的 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");
}
在我的 JoinExam 中,我有以下属性。
@Lob
@Column
private String savedDocument;
我的注意是将上传文件的输入流保存到我的字符串 savedDocument
中,这应该 "represent" 我上传的文件。
当我想下载我的 "uploaded File" 时,我想获取我的 savedDocument
字符串并将其转换回 inputStream。
获得的 inputStream 将用于创建一个 DefaultStreamedContent
所以我可以下载带有 primefaces <p:fileDownload />
-Tag.
的文件
我的问题是,输入流在转换为字符串时似乎丢失了一些数据,或者字符串在转换回输入流时似乎丢失了一些数据。
当我下载文件并尝试打开它时,弹出错误消息,提示无法打开该文件。
感谢您的建议
编辑:当我上传和下载 .txt-Files 时它可以工作,但它不适用于 pdf-Files。
您确定可以将 PDF 内容存储到 @Lob String
字段中吗? PDF 是二进制文件,通常用 @Lob byte[]
字段处理。提示文件无法打开的错误提示文件已损坏。
我正在尝试将来自 Primefaces UploadedFile
的 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");
}
在我的 JoinExam 中,我有以下属性。
@Lob
@Column
private String savedDocument;
我的注意是将上传文件的输入流保存到我的字符串 savedDocument
中,这应该 "represent" 我上传的文件。
当我想下载我的 "uploaded File" 时,我想获取我的 savedDocument
字符串并将其转换回 inputStream。
获得的 inputStream 将用于创建一个 DefaultStreamedContent
所以我可以下载带有 primefaces <p:fileDownload />
-Tag.
我的问题是,输入流在转换为字符串时似乎丢失了一些数据,或者字符串在转换回输入流时似乎丢失了一些数据。 当我下载文件并尝试打开它时,弹出错误消息,提示无法打开该文件。
感谢您的建议
编辑:当我上传和下载 .txt-Files 时它可以工作,但它不适用于 pdf-Files。
您确定可以将 PDF 内容存储到 @Lob String
字段中吗? PDF 是二进制文件,通常用 @Lob byte[]
字段处理。提示文件无法打开的错误提示文件已损坏。