Показывает большой файл PDF, встроенный в браузер

Я пытаюсь показать файл PDF, встроенный в окно моего браузера. Мой код показывает небольшой файл PDF в браузере, но не показывает большой файл PDF. Ниже мой код:

Класс модели:

public  class FileModel
    {
        public int FileModelId { get; set; }
        public byte[]? FileName { get; set; }
        public string? Url { get; set; }

        public string InlineMarkup
        {
            get
            {
                return String.Format("data:application/pdf;base64,{0}", Convert.ToBase64String(this.FileName));
            }
        }
    }

Мой метод индекса класса контроллера:

 public async Task<IActionResult> Index()
        {

            using (MemoryStream stream = new MemoryStream())
            {
                string filePath = Path.Combine("FilledPDFFiles//Package2022.pdf");
                string filePath2 = Path.Combine(_environment.WebRootPath, "FilledPDFFiles//Package2022.pdf");
                byte[] bytes = System.IO.File.ReadAllBytes(filePath2);
                FileModel profile = new FileModel
                {
                    Url = filePath,
                    FileName = bytes
                };
                return View(profile);

            }

Моя бритва

@model AckPackage.Models.FileModel


<embed src = "@Model.InlineMarkup" width = "100% " height = "1000px" type = "application/pdf">

Приведенный выше код отлично работает, если размер файла PDF составляет около 373 КБ. Я пытаюсь встроить файл размером 2330 КБ в веб-браузер. Есть ли способ отображать большие файлы PDF. Ниже моя структура каталогов

Здравствуйте, доктор Фарид Уддин Кирон,

Я попробовал ваше решение, но получил эту ошибку. Размер pdf-файла составляет около 3000 КБ. Пожалуйста, посмотрите на снимок экрана:

ниже приведены настройки браузера Chrome:

ошибка в pdf файле. я помещаю новый файл PDF, и я могу открыть этот файл, но как только я запускаю свой код, файл становится поврежденным и не может быть просмотрен. ниже снимок экрана:

Не могли бы вы провести тест в браузере Edge, если проблема не исчезнет. Фрагмент кода не должен ломаться, если только браузер не ограничивает вас.

Md Farid Uddin Kiron 09.02.2023 03:12

Не могли бы вы попробовать сейчас, я надеюсь, что это будет работать и в Google Chrome.

Md Farid Uddin Kiron 09.02.2023 07:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я пытаюсь встроить файл размером 2330 КБ в веб-браузер. Есть ли у них какие-либо способ отображения больших файлов PDF.

Что ж, похоже, у вас возникли проблемы с отображением большого PDF-файла в браузере. Очевидно, вы можете. На самом деле, способ намного чище и эффективнее, независимо от размера файла PDF. Я проверил с размером до 10 000 КБ. Вот реализация ниже:

Вставить большой PDF:

Контроллер:

public IActionResult DisplayLargePdf()
        {
           

            using (MemoryStream stream = new MemoryStream())
            {


                string embed = "<object data=\"{0}\" type=\"application/pdf\" width=\"1000px\" height=\"600px\">";
                embed += "If you are unable to view file, you can download from <a href = \"{0}\">here</a>";
                embed += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file.";
                embed += "</object>";

                TempData["Embed"] = string.Format(embed, "/YourFolderName/YourFileName.pdf");
                return View();
            }

        }

Вид:

@Html.Raw(TempData["Embed"])

Выход:

Настройки браузера:

Если ваш браузер ограничивает вас, в этом случае вам следует настроить параметры браузера. Для Edge вы можете настроить следующим образом.

Кроме того, если вы хотите загрузить в этом сценарии, вы можете попробовать следующий фрагмент кода:

Скачать большой ПДФ:

public ActionResult DownloadlargePDF()
        {
            string physicalPath = "wwwroot/YourFolderName/YourPDFFileName.pdf";
            byte[] pdfBytes = System.IO.File.ReadAllBytes(physicalPath);
            MemoryStream stream = new MemoryStream(pdfBytes);

            string mimeType = "application/pdf";
            return new FileStreamResult(stream, mimeType)
            {
                FileDownloadName = "AnyNameYouWantToSet.pdf"
            };

        }

Обновлять:

Пожалуйста, избавьтесь от System.IO.File.WriteAllBytes(path + "/Cambridge-IELTS-15-General.pdf", stream.ToArray()); и строки path = Path.Combine(_environment.ContentRootPath, "Documents"); линия, это решит вашу проблему. Ключевой частью является <object data, который будет отображать PDF для вас. Я также тестировал только Google Chrome и работал соответственно.

Я попробовал ваше решение, но продолжаю получать сообщение об ошибке: «Не удалось загрузить PDF-документ. Я изменил свой исходный вопрос, добавив снимки экрана с ошибкой, которую я получаю. Я также добавил снимок экрана с настройками браузера Chrome.

Anjali 09.02.2023 02:58

Спасибо за ваш ответ. Кажется, это, безусловно, проблема с браузером, а не решение, не могли бы вы попробовать в eadge, пожалуйста, чтобы сначала сузить проблему, если проблема не исчезнет. Я на самом деле тестировал в Edge.

Md Farid Uddin Kiron 09.02.2023 03:06

И, пожалуйста, снова откройте браузер после изменения настроек.

Md Farid Uddin Kiron 09.02.2023 03:08

Я получаю ту же ошибку в Edge, я помещаю новый файл PDF в папку, и когда я запускаю код. Я получаю ошибку. Я вставил ошибку выше.

Anjali 09.02.2023 03:43

Каким-то образом, как только я запускаю код, файл повреждается. Не уверен, почему это происходит.

Anjali 09.02.2023 03:59

Как вы можете наблюдать за моим захватом, это нормально, и каждый раз получается правильный файл. Не могли бы вы подтвердить, в каком браузере это вызывает?

Md Farid Uddin Kiron 09.02.2023 04:15

Я помещаю новый pdf-файл в свою папку, и как только эта строка запускается, .pdf-файл становится поврежденным и нечитаемым и выдает ошибку, которую я вставил выше. И Chrome, и браузер Edge делают одно и то же. Это не браузер. это строка кода: System.IO.File.WriteAllBytes(path + "/Package2022.pdf", stream.ToArray()); что портит файл.

Anjali 09.02.2023 05:30

Пожалуйста, попробуйте обновленное решение и удалите System.IO.File.WriteAllBytes строку и путь, поскольку это не требуется в соответствии с вашим сценарием. Спасибо

Md Farid Uddin Kiron 09.02.2023 07:43

Ваше второе решение сработало.

Anjali 09.02.2023 19:16

Спасибо за ваш ответ. Я ничего не знал о вашей проблеме, потому что я тестировал как в eedge, chrome, local, IIS, так и в azure и получил ожидаемый результат. В любом случае, спасибо за сотрудничество.

Md Farid Uddin Kiron 10.02.2023 01:53

Другие вопросы по теме