Saltar al pie de página
USANDO IRONPDF

Cómo cargar y descargar archivos PDF en ASP .NET C# con IronPDF

La gestión de archivos PDF de descarga y cargas es un requisito común en las aplicaciones web ASP.NET Core MVC (Modelo-Vista-Controlador). Ya sea almacenando documentos en una tabla de base de datos mediante EF Core o procesándolos en el servidor antes de guardarlos, los desarrolladores necesitan métodos fiables para manejar documentos PDF de forma eficiente.

Este artículo muestra cómo cargar y descargar archivos PDF en ASP .NET C# aprovechando IronPDF para añadir marcas de agua, generar documentos bajo demanda e integrarse perfectamente con proyectos .NET Core.

¿Cómo crear una tabla de base de datos para el almacenamiento de PDF?

El primer paso consiste en crear una tabla de base de datos para almacenar los archivos PDF cargados como datos binarios. El siguiente código muestra una clase modelo que representa la estructura del archivo con propiedades para el nombre del archivo, el tipo de contenido y el almacenamiento de matrices de bytes. Este es un patrón común en los nuevos tutoriales relacionados con la persistencia de archivos en EF Core.

public class PdfFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public string ContentType { get; set; }
    public byte[] FileData { get; set; }
    public DateTime UploadedDate { get; set; }
}
public class PdfFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public string ContentType { get; set; }
    public byte[] FileData { get; set; }
    public DateTime UploadedDate { get; set; }
}
Public Class PdfFileModel
    Public Property Id As Integer
    Public Property FileName As String
    Public Property ContentType As String
    Public Property FileData As Byte()
    Public Property UploadedDate As DateTime
End Class
$vbLabelText   $csharpLabel

Este modelo mapea directamente a una tabla de base de datos donde FileData almacena el documento PDF como una columna varbinary. La propiedad FileName conserva el nombre del archivo original, mientras que ContentType garantiza la correcta disposición del contenido al servir el archivo PDF de descarga a los usuarios. También puede añadir columnas de detalles o campos de metadatos en función de sus necesidades.

¿Cómo se pueden cargar archivos PDF en una base de datos en ASP.NET Core?

Para cargar uno o más archivos, cree una acción de controlador que acepte un parámetro IFormFile. El control FileUpload de su formulario HTML debe utilizar enctype="multipart/form-data" para cargar correctamente el archivo cargado en el servidor y garantizar que los bytes PDF se transmitan correctamente. Tenga en cuenta que su espacio de nombres será el mismo que el nombre de su proyecto.

namespace UploadPdfs.Controllers
{
public class PdfController : Controller
{
    private readonly ApplicationDbContext _context;
    public PdfController(ApplicationDbContext context)
    {
        _context = context;
    }
    [HttpPost]
    public async Task<IActionResult> Upload(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return BadRequest("No file selected");
        using (var stream = new MemoryStream())
        {
            await file.CopyToAsync(stream);
            var pdfFile = new PdfFileModel
            {
                FileName = file.FileName,
                ContentType = file.ContentType,
                FileData = stream.ToArray(),
                UploadedDate = DateTime.Now
            };
            _context.PdfFiles.Add(pdfFile);
            await _context.SaveChangesAsync();
        }
        return RedirectToAction("Index");
    }
}
}
namespace UploadPdfs.Controllers
{
public class PdfController : Controller
{
    private readonly ApplicationDbContext _context;
    public PdfController(ApplicationDbContext context)
    {
        _context = context;
    }
    [HttpPost]
    public async Task<IActionResult> Upload(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return BadRequest("No file selected");
        using (var stream = new MemoryStream())
        {
            await file.CopyToAsync(stream);
            var pdfFile = new PdfFileModel
            {
                FileName = file.FileName,
                ContentType = file.ContentType,
                FileData = stream.ToArray(),
                UploadedDate = DateTime.Now
            };
            _context.PdfFiles.Add(pdfFile);
            await _context.SaveChangesAsync();
        }
        return RedirectToAction("Index");
    }
}
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Http
Imports Microsoft.AspNetCore.Mvc

Namespace UploadPdfs.Controllers
    Public Class PdfController
        Inherits Controller

        Private ReadOnly _context As ApplicationDbContext

        Public Sub New(context As ApplicationDbContext)
            _context = context
        End Sub

        <HttpPost>
        Public Async Function Upload(file As IFormFile) As Task(Of IActionResult)
            If file Is Nothing OrElse file.Length = 0 Then
                Return BadRequest("No file selected")
            End If

            Using stream As New MemoryStream()
                Await file.CopyToAsync(stream)
                Dim pdfFile As New PdfFileModel With {
                    .FileName = file.FileName,
                    .ContentType = file.ContentType,
                    .FileData = stream.ToArray(),
                    .UploadedDate = DateTime.Now
                }
                _context.PdfFiles.Add(pdfFile)
                Await _context.SaveChangesAsync()
            End Using

            Return RedirectToAction("Index")
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

Cargar un archivo sencillo

Cómo cargar y descargar archivos PDF en ASP .NET C# con IronPDF: Imagen 1 - UI mostrando el PDF subido

Aquí, la interfaz IFormFile proporciona acceso al flujo del archivo cargado. Puede hacer clic con el botón derecho en su proyecto en el Explorador de soluciones y elegir Añadir → Nueva carpeta para organizar los archivos cargados si prefiere el almacenamiento en un sistema de archivos en lugar de una base de datos.

Utilice el siguiente formulario para iniciar la carga:

<form method="post" action="/Pdf/Upload" enctype="multipart/form-data">
    <button type="submit">Upload</button>
</form>
<form method="post" action="/Pdf/Upload" enctype="multipart/form-data">
    <button type="submit">Upload</button>
</form>
The provided code is HTML, not C#. Therefore, it doesn't require conversion to VB.NET. If you have any C# code that needs conversion, please provide it, and I'll be happy to assist.
$vbLabelText   $csharpLabel

¿Cómo se procesan los archivos PDF cargados con marcas de agua?

Antes de guardar los archivos PDF cargados en la base de datos, puede procesarlos utilizando las funciones de marca de agua de IronPDF. Esto permite añadir marcas, etiquetas de "BORRADOR" o sellos de "CONFIDENCIAL" a cada documento PDF que entre en su sistema.

[HttpPost]
 public async Task<IActionResult> UploadWithWatermark(IFormFile file)
 {
     if (file == null || file.Length == 0)
         return BadRequest("No file selected");
     // 1. Read the uploaded file into a byte array
     using (var stream = new MemoryStream())
     {
         await file.CopyToAsync(stream);
         byte[] fileBytes = stream.ToArray();
         // 2. Process with IronPDF (Apply Watermark)
         var PDF = new IronPdf.PdfDocument(fileBytes);
         pdf.ApplyWatermark("<h2 style='color:red'>CONFIDENTIAL</h2>", 60, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
         // 3. Define the new file name and path
         string uniqueFileName = Guid.NewGuid().ToString() + "_" + file.FileName;
         string filePath = Path.Combine(_storagePath, uniqueFileName);
         // 4. Save the processed bytes to the file system
         System.IO.File.WriteAllBytes(filePath, pdf.BinaryData);
         // 5. Save metadata to the in-memory list (instead of DB)
         var pdfFile = new PdfFileModel
         {
             Id = _nextId++,
             FileName = file.FileName,
             ContentType = "application/pdf",
             FilePath = filePath, // Store the physical path
             UploadedDate = DateTime.Now
         };
         _pdfFiles.Add(pdfFile);
     }
     return RedirectToAction("Index");
 }
[HttpPost]
 public async Task<IActionResult> UploadWithWatermark(IFormFile file)
 {
     if (file == null || file.Length == 0)
         return BadRequest("No file selected");
     // 1. Read the uploaded file into a byte array
     using (var stream = new MemoryStream())
     {
         await file.CopyToAsync(stream);
         byte[] fileBytes = stream.ToArray();
         // 2. Process with IronPDF (Apply Watermark)
         var PDF = new IronPdf.PdfDocument(fileBytes);
         pdf.ApplyWatermark("<h2 style='color:red'>CONFIDENTIAL</h2>", 60, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
         // 3. Define the new file name and path
         string uniqueFileName = Guid.NewGuid().ToString() + "_" + file.FileName;
         string filePath = Path.Combine(_storagePath, uniqueFileName);
         // 4. Save the processed bytes to the file system
         System.IO.File.WriteAllBytes(filePath, pdf.BinaryData);
         // 5. Save metadata to the in-memory list (instead of DB)
         var pdfFile = new PdfFileModel
         {
             Id = _nextId++,
             FileName = file.FileName,
             ContentType = "application/pdf",
             FilePath = filePath, // Store the physical path
             UploadedDate = DateTime.Now
         };
         _pdfFiles.Add(pdfFile);
     }
     return RedirectToAction("Index");
 }
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Http
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf

<HttpPost>
Public Async Function UploadWithWatermark(file As IFormFile) As Task(Of IActionResult)
    If file Is Nothing OrElse file.Length = 0 Then
        Return BadRequest("No file selected")
    End If

    ' 1. Read the uploaded file into a byte array
    Using stream As New MemoryStream()
        Await file.CopyToAsync(stream)
        Dim fileBytes As Byte() = stream.ToArray()

        ' 2. Process with IronPDF (Apply Watermark)
        Dim pdf As New PdfDocument(fileBytes)
        pdf.ApplyWatermark("<h2 style='color:red'>CONFIDENTIAL</h2>", 60, Editing.VerticalAlignment.Middle, Editing.HorizontalAlignment.Center)

        ' 3. Define the new file name and path
        Dim uniqueFileName As String = Guid.NewGuid().ToString() & "_" & file.FileName
        Dim filePath As String = Path.Combine(_storagePath, uniqueFileName)

        ' 4. Save the processed bytes to the file system
        System.IO.File.WriteAllBytes(filePath, pdf.BinaryData)

        ' 5. Save metadata to the in-memory list (instead of DB)
        Dim pdfFile As New PdfFileModel With {
            .Id = _nextId,
            .FileName = file.FileName,
            .ContentType = "application/pdf",
            .FilePath = filePath, ' Store the physical path
            .UploadedDate = DateTime.Now
        }
        _nextId += 1
        _pdfFiles.Add(pdfFile)
    End Using

    Return RedirectToAction("Index")
End Function
$vbLabelText   $csharpLabel

PDF con marca de agua

Cómo cargar y descargar archivos PDF en ASP .NET C# con IronPDF: Imagen 2 - PDF con marca de agua y luego guardado en nuestra base de datos

El método ApplyWatermark de IronPDF admite contenido HTML, opacidad, rotación y alineación. Esto también es útil cuando se generan informes desencadenados por peticiones HTTP o tareas de trabajadores automatizados. Explore las funciones adicionales de edición de PDF para encabezados, pies de página y manipulación de páginas.

¿Cómo se pueden descargar archivos de la base de datos?

Para descargar archivos PDF almacenados en su base de datos, cree una acción que recupere la matriz de bytes y la devuelva como un FileResult. El siguiente código demuestra la funcionalidad completa de la descarga:

public IActionResult Download(int id)
{
    var pdfFile = _pdfFiles.FirstOrDefault(f => f.Id == id);
    if (pdfFile == null || !System.IO.File.Exists(pdfFile.FilePath))
        return NotFound();
    byte[] fileBytes = System.IO.File.ReadAllBytes(pdfFile.FilePath);
    return File(fileBytes, pdfFile.ContentType, pdfFile.FileName);
}
public IActionResult Download(int id)
{
    var pdfFile = _pdfFiles.FirstOrDefault(f => f.Id == id);
    if (pdfFile == null || !System.IO.File.Exists(pdfFile.FilePath))
        return NotFound();
    byte[] fileBytes = System.IO.File.ReadAllBytes(pdfFile.FilePath);
    return File(fileBytes, pdfFile.ContentType, pdfFile.FileName);
}
Public Function Download(id As Integer) As IActionResult
    Dim pdfFile = _pdfFiles.FirstOrDefault(Function(f) f.Id = id)
    If pdfFile Is Nothing OrElse Not System.IO.File.Exists(pdfFile.FilePath) Then
        Return NotFound()
    End If
    Dim fileBytes As Byte() = System.IO.File.ReadAllBytes(pdfFile.FilePath)
    Return File(fileBytes, pdfFile.ContentType, pdfFile.FileName)
End Function
$vbLabelText   $csharpLabel

Archivos PDF almacenados con botones de descarga

Cómo cargar y descargar archivos PDF en ASP .NET C# con IronPDF: Imagen 3 - Lista de archivos PDF almacenados

Al mostrar botones de descarga, puede Buscar entradas, mostrar Detalles y mostrar resultados basados en una Query o filtro.

El método File devuelve la matriz de bytes con el tipo de contenido y el nombre de archivo adecuados. Esto desencadena una descarga en el navegador del usuario con cabeceras de disposición de contenido adecuadas. Muestre un botón de descarga en su vista utilizando ayudantes HTML:

<table>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.FileName</td>
            <td>@item.UploadedDate</td>
            <td>
                <a href="/Pdf/Download/@item.Id">Download</a>
            </td>
        </tr>
    }
</table>
<table>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.FileName</td>
            <td>@item.UploadedDate</td>
            <td>
                <a href="/Pdf/Download/@item.Id">Download</a>
            </td>
        </tr>
    }
</table>
$vbLabelText   $csharpLabel

Para el almacenamiento en sistemas de archivos como alternativa al almacenamiento en bases de datos, guarde los archivos en una ruta del servidor y almacene sólo la ruta del archivo en su tabla de base de datos.

¿Cómo crear y descargar documentos PDF a petición?

Además de almacenar archivos existentes, puede generar nuevos documentos PDF de forma dinámica mediante la conversión de HTML a PDF de IronPDF. Este enfoque permite crear informes, facturas o certificados a la carta:

public IActionResult GeneratePdf()
{
    var renderer = new IronPdf.ChromePdfRenderer();
    var PDF = renderer.RenderHtmlAsPdf("<h1>Generated Report</h1><p>Created: " + DateTime.Now + "</p>");
    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
public IActionResult GeneratePdf()
{
    var renderer = new IronPdf.ChromePdfRenderer();
    var PDF = renderer.RenderHtmlAsPdf("<h1>Generated Report</h1><p>Created: " + DateTime.Now + "</p>");
    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
Imports IronPdf

Public Function GeneratePdf() As IActionResult
    Dim renderer As New ChromePdfRenderer()
    Dim PDF = renderer.RenderHtmlAsPdf("<h1>Generated Report</h1><p>Created: " & DateTime.Now & "</p>")
    Return File(PDF.BinaryData, "application/pdf", "report.pdf")
End Function
$vbLabelText   $csharpLabel

PDF generado a petición

Cómo cargar y descargar archivos PDF en ASP .NET C# con IronPDF: Imagen 4 - PDF de ejemplo generado

La clase ChromePdfRenderer convierte cadenas HTML en documentos PDF perfectos, con soporte para estilos CSS y ejecución JavaScript. Este método devuelve el archivo PDF generado directamente al navegador para su descarga sin almacenamiento intermedio. Este método no requiere almacenamiento predeterminado y se activa instantáneamente mediante HTTP GET.

Inicie su prueba gratuita para explorar todas las capacidades de IronPDF para el manejo de PDF en .NET Core, incluyendo mezclar documentos, rellenar formularios, y firmas digitales.

Conclusión

La implementación de la funcionalidad de carga y descarga de PDF en ASP.NET Core combina técnicas estándar de gestión de archivos con las capacidades avanzadas de procesamiento de IronPDF. Con la capacidad de poner marcas de agua, generar, almacenar y servir archivos PDF, su aplicación será más sólida y fácil de usar.

Se pueden integrar otras funciones como la fusión de documentos, la adición de metadatos, la cumplimentación de formularios o la generación de contenidos interactivos. Revise la referencia de IronPDF documentación o navegue por los nuevos tutoriales en nuestro blog para conocer las capacidades avanzadas. ¿Tiene algún problema de error con su código? Echa un vistazo a las útiles guías de solución de problemas.

¿Está listo para mejorar su aplicación ASP.NET Core con funciones PDF avanzadas? Adquiera una licencia IronPDF para la implementación en producción, visite la extensa documentación para obtener información adicional, o converse con nuestro equipo para obtener orientación sobre los requisitos específicos de su proyecto.

Preguntas Frecuentes

¿Cómo puedo cargar archivos PDF en una aplicación ASP.NET Core MVC?

Para cargar archivos PDF en una aplicación ASP.NET Core MVC, puede utilizar la interfaz IFormFile para capturar los datos del archivo desde un formulario y, a continuación, procesarlos del lado del servidor antes de guardarlos, posiblemente con la ayuda de IronPDF para una manipulación posterior del PDF.

¿Cuál es la mejor manera de descargar archivos PDF en ASP.NET?

La mejor manera de descargar archivos PDF en ASP.NET es utilizar la acción FileResult en su controlador. IronPDF puede ayudarle a generar y modificar archivos PDF en el servidor para garantizar que estén listos para su descarga.

¿Puedo almacenar archivos PDF en una base de datos utilizando ASP.NET?

Sí, puede almacenar archivos PDF en una base de datos mediante ASP.NET convirtiendo el archivo en una matriz de bytes y guardándolo como un objeto binario de gran tamaño (BLOB). IronPDF puede ayudar a procesar el PDF antes de almacenarlo.

¿Cómo ayuda IronPDF a poner marcas de agua a los PDF en ASP.NET?

IronPDF ofrece funciones para añadir fácilmente marcas de agua de texto o imagen a los PDF, que pueden integrarse en su aplicación ASP.NET para modificar los documentos antes de descargarlos o almacenarlos.

¿Cuáles son las ventajas de utilizar EF Core para el almacenamiento de PDF?

EF Core permite una asignación objeto-relacional eficaz, lo que facilita la gestión del almacenamiento y la recuperación de archivos PDF de forma estructurada y escalable dentro de su aplicación ASP.NET.

¿Es posible manipular contenido PDF en aplicaciones ASP.NET?

Sí, con IronPDF se puede manipular el contenido de PDF, incluida la edición de texto, imágenes y metadatos, lo que puede ser útil para personalizar documentos antes de que se sirvan a los usuarios.

¿Cómo puedo gestionar la carga de archivos de forma segura en ASP.NET?

Para gestionar las cargas de archivos de forma segura en ASP.NET, debe validar los tipos de archivos, limitar su tamaño y almacenarlos en ubicaciones seguras. El uso de bibliotecas como IronPDF también puede ayudar a garantizar la integridad de los propios archivos PDF.

¿Cuáles son los retos más comunes cuando se trabaja con PDF en aplicaciones web?

Entre los retos comunes se incluyen garantizar la compatibilidad de archivos, gestionar archivos de gran tamaño y mantener la integridad de los documentos. IronPDF ayuda a superarlos proporcionando herramientas sólidas para la creación y manipulación de PDF.

¿Puedo convertir diferentes tipos de archivos a PDF en ASP.NET?

Sí, IronPDF le permite convertir varios tipos de archivos, como archivos HTML o de imagen, en archivos PDF sin problemas dentro de su aplicación ASP.NET.

¿Cuál es el papel del Modelo-Vista-Controlador (MVC) en la gestión de archivos PDF en ASP.NET?

El patrón MVC ayuda a organizar el código para manejar PDF separando la gestión de datos (Modelo), la interfaz de usuario (Vista) y la lógica de aplicación (Controlador), lo que facilita la gestión y la ampliación de las funcionalidades de PDF.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más