Загрузка PDF v1.3 в БД - PullRequest
1 голос
/ 02 мая 2009

У меня есть код 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» в качестве mime-типа. Я не думаю, что есть другой тип для PDF в формате 1.3, но, возможно, я ошибаюсь.

Кто-нибудь еще имел эту проблему раньше и какие-либо советы о том, как ее исправить?

Ответы [ 4 ]

1 голос
/ 02 мая 2009

Проблема может в том, как вы читаете из входного потока.

Всякий раз, когда вы имеете дело с потоками, вы должны читать повторно, отмечая возвращаемое значение на каждой итерации. Итак, ваш оригинальный код должен быть:

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 показывают ваши журналы для случаев, когда он терпит неудачу?

Мне кажется, что дополнительное ведение журнала может иметь огромное значение здесь ... в настоящее время либо вы не знаете, в чем дело, либо просто не сказали нам. Регистрация должна прояснить это.

0 голосов
/ 22 сентября 2009

Кажется, это была просто глупая ошибка. Файл имеет расширение .PDF в отличие от остальных файлов с расширением .pdf. Глупые шапки достали меня. Немного дополнительных отладочных операторов сделали свое дело.

0 голосов
/ 02 мая 2009

Может быть, это не версия PDF. Разве Adobe не ввела линеаризованные PDF-файлы в 1.4?

Данные сразу же доступны в формате «быстрый просмотр в Интернете», а данные недоступны до тех пор, пока загрузка не будет завершена стандартным файлом PDF. Если вы попытаетесь записать в БД до завершения передачи, он может работать с линеаризованным pdf, а не со стандартным.

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

0 голосов
/ 02 мая 2009

Я согласен с ответом Джона Скита на этот вопрос. Разница, вероятно, заключается в том, что Adobe добавила несколько новых методов сжатия в PDF 1.4, поэтому ваши PDF-файлы 1.4 могут быть значительно меньше, чем 1.3-PDF. Таким образом, необходимость читать в цикле может проявиться только для PDF-файлов v1.3 как следствие. (но это только предположение)

...