Я пытаюсь прочитать двоичные данные и создать файл с расширением, также заданным пользователем, код работает нормально для pdf, но для файла docx файлы создаются, но я не могу открыть его, поскольку файлы создаются как поврежденные.
Ниже приведены необходимые данные -
Схема таблицы
CWSMAin. java -
package org.cws;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
public class CWSMain {
private static DriverManagerDataSource dataSource;
private static BlobDAO blobDAO;
public static void main(String[] args) {
dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/application");
dataSource.setUsername("root");
dataSource.setPassword("admin");
blobDAO = new BlobDAO(dataSource);
//int result = blobDAO.writeData("Resume_Anmol.pdf", "MyReume_Anmol.pdf");
blobDAO.readData(3);
}
}
BlobDAO. java -
package infy.cws;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import com.mysql.jdbc.Blob;
public class BlobDAO {
private JdbcTemplate jdbcTemplate;
public BlobDAO(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public int writeData(String inputFile, String outputFile) {
String sql = "INSERT INTO CWSPOC (bdata, file_name) VALUES (?,?)";
File file = new File("C:\\" + inputFile);
try {
FileInputStream input = new FileInputStream(file);
return jdbcTemplate.update(sql, input, outputFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return 0;
}
public boolean readData(int id) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/application", "root",
"admin");
String sql = "SELECT * FROM CWSPOC WHERE id=?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String fName = rs.getString("file_name");
System.out.println("File Name is " + fName);
File file = new File("E:\\" + fName);
FileOutputStream output = new FileOutputStream(file);
InputStream input = rs.getBinaryStream("bdata");
byte[] buffer = new byte[1024];
while (input.read(buffer) > 0) {
output.write(buffer);
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
}
Пожалуйста, дайте мне знать решение, спасибо заранее!
Примечание. - Необходимо создать файл с соответствующим расширением в качестве входных данных, предоставленных пользователем.