Поврежденный файл docx, создаваемый при чтении данных из BLOB-объекта - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь прочитать двоичные данные и создать файл с расширением, также заданным пользователем, код работает нормально для 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;

    }
    }

Пожалуйста, дайте мне знать решение, спасибо заранее!

Примечание. - Необходимо создать файл с соответствующим расширением в качестве входных данных, предоставленных пользователем.

...