File.ReadAllBytes & Memorystream.ToArray возвращают неверные данные - PullRequest
0 голосов
/ 05 апреля 2019

У меня странная проблема. Я делаю приложение C # MVC, которое генерирует PDF-файлы и предлагает их для загрузки с помощью кнопки загрузки.

public ActionResult Download()
{
    string url = (string)TempData["url"];

    byte[] thePdf = System.IO.File.ReadAllBytes(url);

    return File(thePdf, "application/pdf");
}

Внезапно я не могу должным образом преобразовать файл PDF в байт [], либо с помощью File.ReadAllBytes (), либо с помощью потока памяти (или любого другого потока).

Когда я использовал поток памяти, я получал исключение InvalidOperationException как для ReadTimeOut, так и для WriteTimeOut.

Я реализовал код, упомянутый выше, в новом проекте C # MVC, и там все работало нормально. Так что проблема должна быть в проекте, в котором я работаю.

EDIT:

Когда я считываю байты, он возвращает полный байтовый массив, но когда он загружается и конвертируется обратно в PDF-файл, PDF-файл пуст (все страницы существуют) и имя представляет собой набор странных символов.

В новом проекте это просто обычный PDF, как и должно быть.

Кто-нибудь знает, что это может быть и как я могу это исправить? (Я могу уточнить больше, если это необходимо)

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Похоже, у меня слишком много строк или два в FilterConfig.Я добавил 2 пользовательских фильтра, и это, похоже, все испортило.Теперь, когда я удалил их, все снова работает!

0 голосов
/ 05 апреля 2019

Попробуйте что-то вроде this :

public ActionResult Download()
{
    string url = (string)TempData["url"];

    using (WebClient client = new WebClient())
    {
       // Download data.
       byte[] thePdf = client.DownloadData("http://url-to-your-pdf-file.com/file1");
       return File(thePdf,"application/pdf");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...