Поддерживает ли DB2 OS / 390 BLOB файл .docx? - PullRequest
2 голосов
/ 13 мая 2010

Приложение ASP.net вставляет файл Microsoft Windows 2007 .docx в строку в таблице BLOB-объектов DB2 OS / 390. Другое приложение VB.net получает данные BLOB DB2 OS / 390. Приложение VB.net запускает Microsoft Word, чтобы открыть файл .docx, но затем в Microsoft Word появляется сообщение о том, что данные повреждены. Word позволит вам исправить данные, чтобы файл можно было просмотреть, но это дополнительные шаги, и пользователи жалуются.

Я видел несколько примеров, когда .docx можно преобразовать в .doc, но они говорят только об удалении текста. Некоторые из наших .docx имеют изображения в них.

Есть идеи?

1 Ответ

3 голосов
/ 18 марта 2011

Я вижу, что этому вопросу 10 месяцев. Надеюсь, еще не поздно помочь.

Ни DB2, ни любая другая база данных, которая допускает тип данных "Blob", не будут знать, что данные получены из файла .docx, или делать что-либо, что заставит Word пожаловаться. Предполагается, что данные являются точной копией любых данных, которые вы передаете ему.

Аналогично, документ Word не «знает», что он был скопирован в объект BLOB и затем обратно.

Следовательно, проблема почти наверняка заключается в том, что вы обрабатываете BLOB-данные в одной или обеих ваших программах.

Пожалуйста, запустите вашу первую программу, чтобы скопировать файл .docx в базу данных, затем запустите вторую, чтобы прочитать ее обратно. Затем используйте побайтовый инструмент для сравнения двух файлов. Один из способов сделать это - открыть окно командной строки и набрать:

fc/b Doc1.docx Doc2.docx

Если у вас есть доступ к некоторым лучшим инструментам сравнения, обязательно используйте их ... но убедитесь, что они смотрят на КАЖДЫЙ БАЙТ, а не только на печатные символы.

Очевидно, вы АРЕ собираетесь найти различия, иначе Microsoft Word не выдаст вам ошибки по второму, когда с первым просто все в порядке. Как только вы увидите, в чем различия, надеюсь, вы поймете, что происходит и как их исправить.

У меня была похожая проблема несколько лет назад (я хранил графику, но это та же самая основная проблема). Оказывается, что размер документа был затронут - я сохранял 8005 байтов в объекте BLOB, и когда я читал его обратно, я получал 8192 байта. NUL (0) байтов добавлялось в конец данных.

В то время я решил добавить «X» в конец BLOB-данных, когда я записал их в базу данных. Затем, когда я читал его обратно, я искал самый последний «Х» в данных и удалял его вместе с любыми данными после него. Таким образом, я мог восстановить исходные данные. Что я должен был сделать, это сохранить длину данных в базе данных вместе с данными BLOB. Затем вы можете обрезать файл до этого размера, исключив искажение.

Если добавленные байты NUL не являются вашей проблемой, вам нужно будет сделать что-то еще, чтобы решить проблему. Но у вас нет понятия, пока вы не знаете, что изменилось. Что-то сделал.

...