Как мне прочитать правильный поток / байт[] из свойства HttpPostedFile InputStream?

#c# #http #memory #io #stream

#c# #http #память #io #поток

Вопрос:

Я получаю HttpPostedFile загружаемый файл (предположительно pdf), и я должен использовать его stream для инициализации в PDFsharp.

Проблема в том, что, хотя HttpPostedFile SaveAs() метод сохраняет действительный PDF-файл, его сохранение InputStream не создает действительный PDF-файл, поэтому, когда я использую InputStream on PDFsharp для чтения pdf, он выдает исключение с «Недопустимым Pdf» и сохраняет InputStream байт [], который я пытался получить следующим образом:

     public byte[] GetBytesFromStream(System.IO.Stream uploadedFile)
    {
        int length = Convert.ToInt32(uploadedFile.Length); //Length: 103050706
        string str = "";

        byte[] input = new byte[length];

        // Initialize the stream.
        System.IO.Stream MyStream = uploadedFile;

        // Read the file into the byte array.
        MyStream.Read(input, 0, length);
        
        return input;
    }
 

Вызов метода, подобного этому:

 byte[] fileBytes = GetBytesFromStream(uploadedFile.InputStream);
 

Но создание файла из этих байтов также создает недопустимый pdf…

Я создал файл из таких байтов, как этот…

 System.IO.File.WriteAllBytes("Foo.pdf", fileBytes);
 

Тогда у меня есть 2 вопроса по этому поводу:

1-й — Почему поток, который я получаю от InputStream, недействителен, а SaveAs работает.

2-й — Как я мог бы получить правильный поток из InputStream или HttpPostedFile, не сохраняя файл на диск и затем не читая его.

Комментарии:

1. Проверьте позицию входного потока, вероятно, она не равна 0, поэтому установите ее равной 0 перед чтением в массив байтов.

2. Я не знаю, что сказать, но, спасибо! Как я об этом не подумал! Большое вам спасибо!

Ответ №1:

Заметил, что на этот вопрос не было ответа (поскольку комментарий Эвка был решением), и я не мог принять никакого ответа.

Поэтому я делаю это просто для того, чтобы не оставлять этот вопрос без ответа.

tl; dr; Решением в соответствии с комментарием Evk была позиция потока, она считывалась заранее, и установки позиции в 0 перед попыткой создания pdf было достаточно, чтобы устранить проблему.