Проблемы с отображением файлов. asp. net ядро - PullRequest
0 голосов
/ 23 марта 2020

Здравствуйте, у меня проблемы с отображением изображения и PDF на моем экране. Когда я нажимаю на кнопку, которая открывает модальное окно, чтобы показать изображение, оно говорит, что оно не может быть показано, потому что оно содержит ошибки. Файл PDF показывает пустой, и когда я загружаю его, его 0 байтов.

Вот модель:

public class Libro
{
    public int Id { get; set; }

    [Display(Name ="Titulo")]
    [Required(ErrorMessage = "Por favor, ingrese el titulo del libro.")]
    public string Title { get; set; }

    [Display(Name = "Autor")]
    [Required(ErrorMessage = "Por favor, ingrese el nombre del autor.")]
    public string Autor { get; set; }

    [Display(Name ="Foto de Portada")]
    public string Portada { get; set; }

    [Display(Name = "Editorial")]
    [Required(ErrorMessage = "Por favor, ingrese el nombre de la editorial")]
    public string Editorial { get; set; }

    [Display(Name = "Año de Publicacion")]
    [Required(ErrorMessage = "Por favor, ingrese el año en que se publico el libro.")]
    public DateTime PublishDate { get; set; }

    [Display(Name = "Libro PDF")]
    public string ArchivoPdf { get; set; }
}

Мой код просмотра (то же самое для файла PDF, за исключением <img> tag):

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#modalPortada">
      Ver Imagen
</button>
<div class="modal fade" id="modalPortada" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
   <div class="modal-dialog">
      <div class="modal-content">
         <div class="modal-header">
             <h3 class="modal-title" id="myModalLabel">Portada</h3>
                 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
         </div>
         <div class="modal-body">
             <div style="text-align: center;">
                 <img src="@Url.Content(item.Portada)"/>
             </div>
         </div>
         <div class="modal-footer">
             <button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
         </div>
     </div>
  </div>
</div>

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

public async Task<IActionResult> Index()
        {
            return View(await _context.Libros.ToListAsync());
        }

И как мне загрузить файлы в папку wwwroot:

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create(LibrosViewModel libro)
        {
            if (!ModelState.IsValid)
            {
                return View(libro);
            }

            Libro libroNuevo = await DameLibroConArchivos(libro);

            _context.Add(libroNuevo);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
private async Task<Libro> DameLibroConArchivos(LibrosViewModel libro)
        {
            Libro libroNuevo = new Libro();
            libroNuevo.Id = libro.Id;
            libroNuevo.Title = libro.Title;
            libroNuevo.Autor = libro.Autor;
            libroNuevo.Editorial = libro.Editorial;
            libroNuevo.PublishDate = libro.PublishDate;
            if (libro.filePortada != null)
            {
                string pathPortada = Path.Combine(_environment.WebRootPath, "ArchivosLibros/Portadas/" + libro.Title.Replace(" ", "_"));
                libroNuevo.Portada = Path.Combine(pathPortada, libro.filePortada.FileName);
                if (!Directory.Exists(pathPortada))
                {
                    Directory.CreateDirectory(pathPortada);
                }
                using (var stream1 = new FileStream(Path.Combine(pathPortada,libro.filePortada.FileName) , FileMode.Create))
                {
                    await libro.filePortada.CopyToAsync(stream1);
                }
            }
            if (libro.filePdf != null)
            {
                string pathPdf = Path.Combine(_environment.WebRootPath, "ArchivosLibros/Libros/" + libro.Title.Replace(" ", "_"));
                libroNuevo.ArchivoPdf = Path.Combine(pathPdf, libro.filePdf.FileName);
                if (!Directory.Exists(pathPdf))
                {
                    Directory.CreateDirectory(pathPdf);
                }
                using (var stream2 = new FileStream(Path.Combine(pathPdf,libro.filePdf.FileName), FileMode.Create))
                {
                    await libro.filePdf.CopyToAsync(stream2);
                }
            }
            return libroNuevo;
        }
``

1 Ответ

0 голосов
/ 24 марта 2020

Сначала убедитесь, что ваш URL правильный.

Поскольку ваш item.Portada хранит абсолютный путь вашего изображения, который похож на

C:\\your project path\\wwwroot\\ArchivosLibros\\Libros\\title_name\\filename.png

<img src="@Url.Content(item.Portada)"/> не может правильно отобразить его, что привело к ошибке 404.

Требуется только относительный путь после wwroot:

<img src="@Url.Content("\\ArchivosLibros\\Libros\\title_name\\filename.png")" />

Итак, попытка чтобы изменить его ниже, можно решить.

<img src="@Url.Content(item.Portada.Substring(item.Portada.IndexOf("wwwroot")).Substring(7))" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...