Поврежденные файлы Microsoft Office 2007 ASP.NET 1.1 и SQL Server - PullRequest
1 голос
/ 11 августа 2011

Я работаю над сайтом ASP.NET 1.1, который хранит файлы в базе данных.С 2001 года веб-сайт прекрасно работает, без проблем загружая и загружая документы любого типа.

Однако недавно заказчик заметил, что все документы Microsoft Office 2007 DOCX, XLSX, ect повреждены при возникновении каких-либо проблем.Пользователь пытается загрузить их.

Я заметил, что SQL Server добавляет дополнительный байт к DocumentContent (столбец изображения).Перед загрузкой документа содержание и длина в порядке.Однако после их сохранения SQL Server добавляет ДОПОЛНИТЕЛЬНЫЙ байт .... ПОЧЕМУ ?????

Многие люди в Интернете предоставили решение о том, как загрузить файл, и это здорово, и это сработало.для меня.

Я ищу ответ на этот вопрос ... ПОЧЕМУ СЕРВЕР SQL ДОБАВЛЯЕТ ДОПОЛНИТЕЛЬНЫЙ БАЙТ К КОЛОННЕ ИЗОБРАЖЕНИЯ?

Это Asp.NET 1.1 и SQL 2000но мы только что перенесли его в 2008 год, и у нас все та же проблема.

1 Ответ

1 голос
/ 17 июня 2014

Я не уверен на 100%, была ли ваша проблема такой же, как у меня, но в моем случае я обнаружил, что проблема на самом деле была в записи , а не в части чтения. Например, мой оригинальный код написания был таким:

Dim FILE_CONTENT(len) As Byte
File.InputStream.Read(FILE_CONTENT, 0, len)
SaveFileToDatabase(FILE_NAME, CONTENT_TYPE, FILE_CONTENT)

Когда я изменил первую строку следующим образом:

Dim FILE_CONTENT(0 To len - 1) As Byte 

ошибка чтения исчезла. Я просто забыл, что VB фактически выделяет N + 1 байт (от O до N) по умолчанию, когда вы измеряете его без указания нижней границы. См. Аналогичную ситуацию, описанную здесь: Загруженные файлы Docx повреждены . Надеюсь, это поможет.

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