Вопрос

У меня есть код 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, а не со стандартным.

В любом случае, Джон Скит прав. Регистрация или правильно расположенные точки останова скажут вам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top