#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 было достаточно, чтобы устранить проблему.