Я пытаюсь показать файл 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, и я могу открыть этот файл, но как только я запускаю свой код, файл становится поврежденным и не может быть просмотрен. ниже снимок экрана:
Не могли бы вы попробовать сейчас, я надеюсь, что это будет работать и в Google Chrome.
Я пытаюсь встроить файл размером 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.
Спасибо за ваш ответ. Кажется, это, безусловно, проблема с браузером, а не решение, не могли бы вы попробовать в eadge, пожалуйста, чтобы сначала сузить проблему, если проблема не исчезнет. Я на самом деле тестировал в Edge.
И, пожалуйста, снова откройте браузер после изменения настроек.
Я получаю ту же ошибку в Edge, я помещаю новый файл PDF в папку, и когда я запускаю код. Я получаю ошибку. Я вставил ошибку выше.
Каким-то образом, как только я запускаю код, файл повреждается. Не уверен, почему это происходит.
Как вы можете наблюдать за моим захватом, это нормально, и каждый раз получается правильный файл. Не могли бы вы подтвердить, в каком браузере это вызывает?
Я помещаю новый pdf-файл в свою папку, и как только эта строка запускается, .pdf-файл становится поврежденным и нечитаемым и выдает ошибку, которую я вставил выше. И Chrome, и браузер Edge делают одно и то же. Это не браузер. это строка кода: System.IO.File.WriteAllBytes(path + "/Package2022.pdf", stream.ToArray()); что портит файл.
Пожалуйста, попробуйте обновленное решение и удалите System.IO.File.WriteAllBytes
строку и путь, поскольку это не требуется в соответствии с вашим сценарием. Спасибо
Ваше второе решение сработало.
Спасибо за ваш ответ. Я ничего не знал о вашей проблеме, потому что я тестировал как в eedge, chrome, local, IIS, так и в azure и получил ожидаемый результат. В любом случае, спасибо за сотрудничество.
Не могли бы вы провести тест в браузере Edge, если проблема не исчезнет. Фрагмент кода не должен ломаться, если только браузер не ограничивает вас.