Загрузка PDF v1.3 в БД
-
03-07-2019 - |
Вопрос
У меня есть код C #, который загружает изображения и файлы в базу данных. В настоящее время я думал, что это работает для всех документов, которые соответствуют списку миметипов. Однако это не удается на некоторых PDF-файлах.
Я сузил проблему до того, что некоторые PDF-файлы имеют формат 1.3, а некоторые - формат 1.4. 1.4 работает и правильно загружен, однако 1.3 не загружается и не генерирует никаких ошибок во время выполнения, его просто не удается добавить.
Часть текущего кода для загрузки pdf -
Checks for valid MIME Type
...
byte[] fileData = new byte[uploadFile.ContentLength];
uploadFile.InputStream.Read(fileData, 0, uploadFile.ContentLength);
...
Continues on to Uploads to db.
Для PDF он ищет "application / pdf" как тип пантомимы. Я не думаю, что есть другой тип для PDF в формате 1.3, но, возможно, я ошибаюсь.
Кто-нибудь еще когда-либо имел эту проблему раньше и какие-либо советы о том, как ее исправить?
Решение 4
Кажется, это была просто глупая ошибка. Файл имеет расширение .PDF в отличие от остальных файлов с расширением .pdf. Глупые шапки достали меня. Немного дополнительных отладочных операторов сделали свое дело.
Другие советы
Проблема может заключаться в том, как вы читаете из входного потока.
Всякий раз, когда вы имеете дело с потоками, вы должны читать повторно, отмечая возвращаемое значение на каждой итерации. Итак, ваш оригинальный код должен быть:
byte[] fileData = new byte[uploadFile.ContentLength];
int totalRead = 0;
while (totalRead < fileData.Length)
{
int read = uploadFile.InputStream.Read(fileData, totalRead,
fileData.Length - totalRead);
if (read == 0)
{
throw new IOException("Input data was truncated");
}
totalRead += read;
}
Однако это не может быть проблемой. Я ожидаю, что это приведет к усеченным данным, а не к полному отсутствию данных. Когда вы говорите, что «просто не может быть добавлено» Не могли бы Вы уточнить? Сколько логов вы положили? Где код, который фактически вставляет данные в базу данных? Какой тип MIME показывают ваши журналы в тех случаях, когда он терпит неудачу?
Мне кажется, что дополнительное ведение журнала, вероятно, имело бы здесь огромную разницу ... в настоящее время либо вы не знаете, в чем дело, либо вы просто не сказали нам. Ведение журнала должно прояснить это.
Я согласен с ответом Джона Скита на этот вопрос. Разница, вероятно, заключается в том, что Adobe добавила несколько новых методов сжатия в PDF 1.4, поэтому ваши PDF-файлы 1.4 могут быть значительно меньше, чем 1.3-PDF. Таким образом, необходимость читать в цикле может проявиться только для PDF-файлов v1.3 как следствие. (но это только предположение)
Может быть, это не версия PDF. Разве Adobe не ввела линеаризованные PDF-файлы в 1.4? Р>
Данные сразу же доступны с помощью функции "быстрого просмотра веб-страниц". pdf и данные недоступны, пока загрузка не завершится стандартным pdf. Если вы попытаетесь записать в БД до завершения передачи, он может работать с линеаризованным pdf, а не со стандартным.
В любом случае, Джон Скит прав. Регистрация или правильно расположенные точки останова скажут вам.