Серіалізація та робота з документом в базі даних

Одна з завдань, які ви можете зробити при роботі з документами, зберігання та перерозподілу документів Document об’єкти і з бази даних. Наприклад, це буде необхідно, якщо ви запровадили будь-який тип системи управління контентом. Всі попередні версії документів необхідно зберігати в базі даних. Уміння зберігати документи в базі даних також надзвичайно корисно, коли ваша заявка надає послуги на веб-сайті.

Aspose.Words надає можливість перетворювати документ в байтовий масив для подальшої роботи з цим документом в базі даних.

Перетворення документа в Byte Array

Щоб зберігати документ у базі даних або підготувати документ для передачі через веб-сайт, потрібно часто засвідчити документ, щоб отримати байтовий масив.

Для серіалізації Document об’єкт в Aspose.Words:

1,1 км Збережіть його на MemoryStream використання Save метод перевантаження Document клас. 1,1 км Дзвоните до ToArray метод, який повертає масив байтів, що представляють документ у байтній формі.

Ви можете перевернутися до завантаження байтів назад в Document об’єкт.

Приклад нижче показує, як серіалізувати Document об’єкт для отримання масиву байтів, а потім як несеріалізації масиву байтів для отримання Document об’єкт знову:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Load the document.
Document doc = new Document(dataDir + "Test File (doc).doc");
// Create a new memory stream.
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// Save the document to stream.
doc.save(outStream, SaveFormat.DOCX);
// Convert the document to byte form.
byte[] docBytes = outStream.toByteArray();
// The bytes are now ready to be stored/transmitted.
// Now reverse the steps to load the bytes back into a document object.
ByteArrayInputStream inStream = new ByteArrayInputStream(docBytes);
// Load the stream into a new document object.
Document loadDoc = new Document(inStream);

Зберігати та видаляти документ у базі даних

Цей розділ показує, як зберегти документ в базі даних, а потім завантажити його назад в базу даних Document об’єкт для роботи з ним. Для простоти, ім’я файлу є ключем, який використовується для зберігання та обробки документів з бази даних. База даних містить два стовпчики. Перший стовпчик “Файлім’я” зберігається як Рядок і використовується для ідентифікації документів. Другий стовпчик “FileContent” зберігається в якості BLOB об’єкт, який зберігає об’єкт документа в байтній формі.

Приклад коду показує, як налаштувати підключення до бази даних та виконувати команди:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
String url1 = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123";
// Open a database connection.
Connection mConnection = DriverManager.getConnection(url1, user, password);

Наприклад, наступний код показує, як зберегти документ на базу даних, а потім читати той самий документ знову, і, нарешті, видалити запис, що містить документ з бази даних:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Store the document to the database.
StoreToDatabase(doc, mConnection);
// Read the document from the database and store the file to disk.
Document dbDoc = ReadFromDatabase(dataDir + fileName, mConnection);
// Save the retrieved document to disk.
dbDoc.save(dataDir + fileName);
// Delete the document from the database.
DeleteFromDatabase(dataDir + fileName, mConnection);
// Close the connection to the database.
mConnection.close();

Зберегти документ до бази даних

Для збереження документа в базі даних перетворюйте цей документ в масив байтів, як описано на початку цієї статті. Потім зберегти цей байтовий масив в поле бази даних.

Приклад коду показує, як зберегти документ на вказану базу даних:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public static void StoreToDatabase(Document doc, Connection mConnection) throws Exception {
// Create an output stream which uses byte array to save data
ByteArrayOutputStream aout = new ByteArrayOutputStream();
// Save the document to byte array
doc.save(aout, SaveFormat.DOCX);
// Get the byte array from output steam
// the byte array now contains the document
byte[] buffer = aout.toByteArray();
// Get the filename from the document.
String fileName = doc.getOriginalFileName();
String filePath = fileName.replace("\\", "\\\\");
// Create the SQL command.
String commandString = "INSERT INTO Documents (FileName, FileContent) VALUES('" + filePath + "', '" + buffer
+ "')";
Statement statement = mConnection.createStatement();
statement.executeUpdate(commandString);
}

Вкажіть командуString, який є виразом SQL, який робить всі роботи:

  • до Для збереження документа в базу даних використовується команда “INSERT INTO” і таблиця, вказаний разом з значеннями двох записів полів – FileName і FileContent. Щоб уникнути додаткових параметрів, ім’я файлу береться з Document сам об’єкт. Про нас FileContent значення поля призначено байтів з потоку пам’яті, що містить бінарне уявлення про збережений документ.
  • до Решта рядка коду виконує команду, яка зберігає команду Aspose.Words документ у базі даних.

Отримати документ з бази даних

Для отримання документа з бази даних виберіть запис, який містить дані документа як масив байтів. Потім завантажте байтовий масив з запису в MemoryStream і створити Document об’єкт, який навантажить документ з документа MemoryStreamй

Приклад наступного коду показує, як отримати і повернути документ з вказаної бази даних, використовуючи ім’я файлу як ключ, щоб фіксувати цей документ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static Document ReadFromDatabase(String fileName, Connection mConnection) throws Exception {
// Create the SQL command.
String commandString = "SELECT * FROM Documents WHERE FileName=?";
PreparedStatement statement = mConnection.prepareStatement(commandString);
statement.setString(1, fileName);
Document doc = null;
ResultSet result = statement.executeQuery();
if (result.next()) {
Blob blob = result.getBlob("FileContent");
InputStream inputStream = blob.getBinaryStream();
doc = new Document(inputStream);
inputStream.close();
System.out.println("File saved");
}
result.close();
return doc;
}

Видалення документа з бази даних

Для видалення документа з бази даних використовуйте відповідну команду SQL без будь-яких маніпуляцій на базі даних Document об’єкт.

Приклад наступного коду показує, як видалити документ з бази даних, використовуючи ім’я файлу, щоб фіксувати запис:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static void DeleteFromDatabase(String fileName, Connection mConnection) throws Exception {
// Create the SQL command.
String commandString = "DELETE FROM Documents WHERE FileName='" + fileName + "'";
Statement statement = mConnection.createStatement();
// Delete the record.
statement.execute(commandString);
}