我在Java应用程序中遇到以下情况。
从数据库中检索此 Blob 对象,该对象是数据库上PDF文件的表示形式:
Blob blobPdf = cedolinoPdf.getAllegatoBlob();
现在我必须将其转换为PDF文件。我该怎么做这个任务?
TNX
答案 0 :(得分:3)
如果Blob是PDF的二进制表示,那么您需要做的就是获取字节。如果你想将PDF写入文件,你可以做...
Blob blobPdf = ...;
File outputFile = new File("/tmp/blah/whatever.pdf");
FileOutputStream fout = new FileOutputStream(outputFile);
IOUtils.copy(blobPdf.getBinaryStream(), fout);
这应该将您的PDF写入名为" /tmp/blah/whatever.pdf"
的文件答案 1 :(得分:1)
您可以使用ResultSet中的getBinaryStream(),然后可以从getBinaryStream()返回的InputStream创建一个文件。
您的代码可能看起来像这样
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL, "sa", "sa");
statement = connection.createStatement();
rs = statement.executeQuery("SELECT fileName,blobFile FROM tblBlobFiles");
if (rs.next()) {
String filename = rs.getString(1);
Blob blob = rs.getBlob(2);
InputStream is = blob.getBinaryStream();
FileOutputStream fos = new FileOutputStream("C:\\DownloadedFiles"+ "\\" + filename);
int b = 0;
while ((b = is.read()) != -1)
{
fos.write(b);
}
}
} catch (IOException e)
{
e.getMessage (); e.printStackTrace();
System.out.println(e);
}
catch (SQLException e)
{
e.getMessage (); e.printStackTrace();
System.out.println(e);
}
如果需要所有blob,请对结果集进行迭代
答案 2 :(得分:1)
您可以使用Java NIO
InputStream fileBolb = rs.getBinaryStream("columnName");
ReadableByteChannel rbc = Channels.newChannel(fileBolb );
FileOutputStream fos = new FileOutputStream(filePath + fname);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();