Я сохраняю документы (*.docx, *.doc, *.pdf
) в столбце Image
в базе данных SQL Server 2012. Вот скрипт частичной таблицы (для краткости я удалил много столбцов)
[DocId] [int] IDENTITY(1,1) NOT NULL,
[DocDate] [datetime] NOT NULL DEFAULT (getdate()),
[DocName] [varchar](255) NOT NULL DEFAULT (''),
[DocObject] [image] NOT NULL
Документы сохраняются с использованием этого кода в C #
using (Stream docStream = UploadResume.PostedFile.InputStream)
{
Int32 docSize = (Int32)docStream.Length;
byte[] docBytes = new byte[docSize + 1];
docStream.Read(docBytes, 0, docSize);
SaveDoc(docId, UploadResume.PostedFile.FileName.Trim(), docBytes);
}
SaveDoc - это процедура, которая вставляет данные в таблицу. Я удалил код для сохранения других полей данных для краткости.
Я получаю данные в таблицу данных (dt). Я сохраняю содержимое документа в файловой системе, используя следующий код C #:
byte[] docBytes = (byte[])(dt.Rows[0]["DocObject"]);
var fileName = dt.Rows[0]["DocName"].ToString();
File.WriteAllBytes(Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Documents\\{DateTime.Now.ToString("yyyyMMdd")}"), $"{fileName}"), docBytes);
Я могу сохранить документ MS Word в БД, извлечь его из БД и успешно сохранить в файловой системе. Однако, когда я открываю документ в MS Word, я получаю сообщение об ошибке, указывающее, что файл поврежден. PDF файлы сохраняются и открываются без проблем. Документы Microsoft Word не являются.