Документ, сохраненный в столбце изображения, будет поврежден при получении - PullRequest
0 голосов
/ 26 августа 2018

Я сохраняю документы (*.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 не являются.

1 Ответ

0 голосов
/ 26 августа 2018

Спасибо за вашу помощь. Я поставил дополнительный байт для тестирования чего-то другого и забыл удалить его позже. Это была проблема. Я удалил его, и все работает нормально. Я знаю, что тип столбца изображения устарел. Тем не менее, база данных является частью стороннего коммерческого продукта и не может быть изменена без нарушения коммерческого приложения. Спасибо за указание, хотя. Ценить это. Я пока не могу принять ответ и проголосовать, так как у меня недостаточно очков репутации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...