在一个简单的java程序中下载zip文件中的blob数据
我无法使用下面的代码下载文件,因为我有多种类型的扩展名要下载,我想压缩所有文件并下载。如果我运行下面的代码,它会说文件已损坏。有人能帮忙吗在一个简单的java程序中下载zip文件中的blob数据,java,download,zipfile,Java,Download,Zipfile,我无法使用下面的代码下载文件,因为我有多种类型的扩展名要下载,我想压缩所有文件并下载。如果我运行下面的代码,它会说文件已损坏。有人能帮忙吗 import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.Connection; import java.
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JdbcReadFile {
private static final int BUFFER_SIZE = 4096;
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@xxx:xxxx:xxx";
String user = "xxx";
String password = "xxx";
String filePath = "C:/abc.vsd";
try {
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "SELECT DOC_BO FROM table fetch first 10 rows only";
PreparedStatement statement = conn.prepareStatement(sql);
ResultSet result = statement.executeQuery();
if (result.next()) {
Blob blob = result.getBlob("DOC_BO");
InputStream inputStream = blob.getBinaryStream();
OutputStream outputStream = new FileOutputStream(filePath);
int bytesRead = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
System.out.println("File saved");
}
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
这不需要前端。使用以下代码解决问题 公共类BlobDataExtract{ 静态ZipOutputStream zos=null; 静态字符串url=“jdbc:oracle:thin:@hostname:1521:SID”
}我还不明白。现在,在循环的每个I创建中,您都创建了一个文件
C:/abc.vsd
,它替换了任何现有的文件,我认为它应该是一个visio文件,并且已损坏。但是你希望每次迭代都有一个文件,并最终将它们放在一个zip中?是的,我有不同类型的文件。不仅仅是visio,比如.txt、.xlsx、.vsd。我想所有的文件被添加到一个zip文件和下载。可能吗?应该是,你能从表的某个字段中确定文件类型吗?你知道吗,blob中存储的二进制文件还没有损坏?有什么东西可以在本地作为新文件下载而不是写入文件吗?即使在创建了一个没有数据的新文件后,它也会说文件在写入数据后被破坏了
public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(url, "user", "password");
String sql = "select Blob_Data,ORIG_NM from table";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
byte[] docBlob = null;
String filename = null;
FileOutputStream fos = new FileOutputStream("C:/Users/test.zip");
zos = new ZipOutputStream(fos);
while (rs.next()) {
docBlob = rs.getBytes("Blob_Data");
filename = rs.getString("ORIG_NM");
try {
zos.putNextEntry(new ZipEntry(filename));
zos.write(docBlob, 0, docBlob.length);
} catch (FileNotFoundException ex) {
System.err.println("A file does not exist: " + ex);
} catch (IOException ex) {
System.err.println("I/O error: " + ex);
}
zos.closeEntry();
}
}