Przejdź do treści stopki
KORZYSTANIE Z IRONPDF

Jak przesyłać i pobierać pliki PDF w ASP.NET Core z C#

Przesyłanie i pobieranie plików PDF w .NET Core wymaga obsługi danych binarnych, zarządzania akcjami kontrolera oraz — opcjonalnie — przetwarzania dokumentów po stronie serwera przed ich zapisaniem lub dostarczeniem. Dzięki IronPDF możesz wyjść poza proste przechowywanie plików, stosując znaki wodne, generując pliki PDF z HTML i zwracając przetworzone dokumenty użytkownikom — wszystko to w ramach istniejącego potoku MVC. Ten przewodnik przeprowadzi Cię przez każdy etap tworzenia kompletnego przepływu pracy związanego z przesyłaniem i pobieraniem plików w języku C# przy użyciu .NET 10.

Jak zainstalować IronPDF w projekcie ASP.NET Core?

Przed napisaniem jakiejkolwiek logiki pobierania lub wysyłania plików dodaj IronPDF do swojego projektu za pomocą menedżera pakietów NuGet lub interfejsu CLI .NET. Użyj Install-Package IronPdf w konsoli menedżera pakietów lub uruchom poniższe polecenia CLI, aby utworzyć szkielet nowego projektu MVC i dodać wszystkie wymagane pakiety jednocześnie.

dotnet new mvc -n PdfManager --framework net10.0
cd PdfManager
dotnet add package IronPdf
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet new mvc -n PdfManager --framework net10.0
cd PdfManager
dotnet add package IronPdf
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
SHELL

Po zainstalowaniu IronPDF zapewnia dostęp do ChromePdfRenderer do generowania plików PDF z HTML, PdfDocument do ładowania i edycji istniejących plików oraz szeregu narzędzi do edycji, w tym znaków wodnych, pieczątek i podpisów cyfrowych. Pełną historię wersji i informacje o kompatybilności można znaleźć na stronie pakietu IronPDF NuGet.

Konfiguracja projektu

Dodaj stałą ścieżki przechowywania do Program.cs i zarejestruj swój ApplicationDbContext w kontenerze wstrzykiwania zależności. Struktura projektu będzie zawierała Controllers/PdfController.cs, Models/PdfFileModel.cs oraz Data/ApplicationDbContext.cs przed napisaniem jakiejkolwiek logiki specyficznej dla plików PDF.

Jak stworzyć model bazy danych do przechowywania plików PDF?

Podstawą każdego systemu przesyłania plików PDF jest klasa modelu, która jest mapowana na tabelę bazy danych. Poniższy rekord w języku C# zawiera najważniejsze pola — nazwę pliku, typ zawartości, surowe dane binarne oraz znacznik czasu przesłania.

public class PdfFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; } = string.Empty;
    public string ContentType { get; set; } = "application/pdf";
    public byte[] FileData { get; set; } = Array.Empty<byte>();
    public DateTime UploadedDate { get; set; } = DateTime.UtcNow;
}
public class PdfFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; } = string.Empty;
    public string ContentType { get; set; } = "application/pdf";
    public byte[] FileData { get; set; } = Array.Empty<byte>();
    public DateTime UploadedDate { get; set; } = DateTime.UtcNow;
}
Public Class PdfFileModel
    Public Property Id As Integer
    Public Property FileName As String = String.Empty
    Public Property ContentType As String = "application/pdf"
    Public Property FileData As Byte() = Array.Empty(Of Byte)()
    Public Property UploadedDate As DateTime = DateTime.UtcNow
End Class
$vbLabelText   $csharpLabel

FileData zapisuje plik PDF jako duży obiekt binarny (BLOB). Takie podejście sprawia, że dokumenty pozostają samodzielne w bazie danych, co ułatwia tworzenie kopii zapasowych i sprawia, że zapytania są proste. W przypadku dużych ilości danych lub dużych plików warto rozważyć przechowywanie w bazie danych tylko ścieżki do pliku, a sam plik binarny zapisać w chmurze, np. w Azure Blob Storage lub Amazon S3.

Konfiguracja Entity Framework Core

Zarejestruj model w EF Core, dodając właściwość DbSet<PdfFileModel> do swojego ApplicationDbContext:

using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) { }

    public DbSet<PdfFileModel> PdfFiles { get; set; }
}
using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) { }

    public DbSet<PdfFileModel> PdfFiles { get; set; }
}
Imports Microsoft.EntityFrameworkCore

Public Class ApplicationDbContext
    Inherits DbContext

    Public Sub New(options As DbContextOptions(Of ApplicationDbContext))
        MyBase.New(options)
    End Sub

    Public Property PdfFiles As DbSet(Of PdfFileModel)
End Class
$vbLabelText   $csharpLabel

Uruchom dotnet ef migrations add InitialCreate, a następnie dotnet ef database update, aby utworzyć schemat. Entity Framework Core automatycznie mapuje byte[] do kolumny varbinary(max) w SQL Serverze lub kolumny BLOB w SQLite — nie jest wymagane ręczne pisanie kodu SQL.

Jak przesłać pliki PDF w kontrolerze ASP.NET Core?

Akcja kontrolera obsługująca przesyłanie danych otrzymuje parametr IFormFile z formularza HTML przy użyciu enctype="multipart/form-data". Akcja odczytuje strumień do MemoryStream, konwertuje go na tablicę bajtów i zapisuje wynik za pomocą Entity Framework Core.

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

public class PdfController : Controller
{
    private readonly ApplicationDbContext _context;

    public PdfController(ApplicationDbContext context)
    {
        _context = context;
    }

    [HttpPost]
    public async Task<IActionResult> Upload(IFormFile file)
    {
        if (file is null || file.Length == 0)
            return BadRequest("No file selected.");

        if (!file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
            return BadRequest("Only PDF files are accepted.");

        using var stream = new MemoryStream();
        await file.CopyToAsync(stream);

        var pdfFile = new PdfFileModel
        {
            FileName = Path.GetFileName(file.FileName),
            ContentType = file.ContentType,
            FileData = stream.ToArray(),
            UploadedDate = DateTime.UtcNow
        };

        _context.PdfFiles.Add(pdfFile);
        await _context.SaveChangesAsync();

        return RedirectToAction(nameof(Index));
    }

    public async Task<IActionResult> Index()
    {
        var files = await _context.PdfFiles
            .Select(f => new { f.Id, f.FileName, f.UploadedDate })
            .ToListAsync();
        return View(files);
    }
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

public class PdfController : Controller
{
    private readonly ApplicationDbContext _context;

    public PdfController(ApplicationDbContext context)
    {
        _context = context;
    }

    [HttpPost]
    public async Task<IActionResult> Upload(IFormFile file)
    {
        if (file is null || file.Length == 0)
            return BadRequest("No file selected.");

        if (!file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
            return BadRequest("Only PDF files are accepted.");

        using var stream = new MemoryStream();
        await file.CopyToAsync(stream);

        var pdfFile = new PdfFileModel
        {
            FileName = Path.GetFileName(file.FileName),
            ContentType = file.ContentType,
            FileData = stream.ToArray(),
            UploadedDate = DateTime.UtcNow
        };

        _context.PdfFiles.Add(pdfFile);
        await _context.SaveChangesAsync();

        return RedirectToAction(nameof(Index));
    }

    public async Task<IActionResult> Index()
    {
        var files = await _context.PdfFiles
            .Select(f => new { f.Id, f.FileName, f.UploadedDate })
            .ToListAsync();
        return View(files);
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.EntityFrameworkCore
Imports System.IO
Imports System.Threading.Tasks

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

        If Not file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase) Then
            Return BadRequest("Only PDF files are accepted.")
        End If

        Using stream As New MemoryStream()
            Await file.CopyToAsync(stream)

            Dim pdfFile As New PdfFileModel With {
                .FileName = Path.GetFileName(file.FileName),
                .ContentType = file.ContentType,
                .FileData = stream.ToArray(),
                .UploadedDate = DateTime.UtcNow
            }

            _context.PdfFiles.Add(pdfFile)
            Await _context.SaveChangesAsync()
        End Using

        Return RedirectToAction(NameOf(Index))
    End Function

    Public Async Function Index() As Task(Of IActionResult)
        Dim files = Await _context.PdfFiles _
            .Select(Function(f) New With {f.Id, f.FileName, f.UploadedDate}) _
            .ToListAsync()
        Return View(files)
    End Function
End Class
$vbLabelText   $csharpLabel

Weryfikacja przesłanych plików

Zawsze sprawdzaj typ treści przed przetworzeniem. Sprawdzanie file.ContentType zapobiega przypadkowemu przesyłaniu przez użytkowników treści innych niż PDF. Aby uzyskać lepszą weryfikację, przeczytaj pierwsze cztery bajty strumienia i sprawdź magiczny numer pliku PDF (%PDF). Należy również egzekwować maksymalny rozmiar pliku — zazwyczaj 10 MB dla ogólnych procesów dokumentacyjnych — poprzez sprawdzenie file.Length przed skopiowaniem strumienia.

Formularz HTML, który uruchamia tę akcję, wymaga dwóch atrybutów: method="post" i enctype="multipart/form-data". Bez typu kodowania przeglądarki wysyłają nazwę pliku jako zwykły tekst, a nie zawartość binarną. Dodaj element <input type="file" name="file" accept=".pdf" /> oraz przycisk przesyłania wewnątrz tagu formularza, kierujący do /Pdf/Upload.

Jak przesyłać i pobierać pliki PDF w ASP .NET C# za pomocą IronPDF: Obraz 1 – Interfejs użytkownika pokazujący przesłany plik PDF

Jak dodać znak wodny do przesłanego pliku PDF przed jego zapisaniem?

Przetwarzanie plików po stronie serwera przed ich zapisaniem jest jednym z najbardziej praktycznych zastosowań funkcji znakowania wodnego IronPDF. Możesz oznaczyć każdy przychodzący dokument etykietą "POUFNE", logo firmy lub adnotacją "WERSJA ROBOCZA", zanim dane trafią do bazy danych.

[HttpPost]
public async Task<IActionResult> UploadWithWatermark(IFormFile file)
{
    if (file is null || file.Length == 0)
        return BadRequest("No file selected.");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    byte[] originalBytes = stream.ToArray();

    // Load the uploaded file into IronPDF
    var pdf = new IronPdf.PdfDocument(originalBytes);

    // Apply an HTML watermark centered on every page
    pdf.ApplyWatermark(
        "<h2 style='color:red;opacity:0.4'>CONFIDENTIAL</h2>",
        rotation: 45,
        opacity: 60,
        verticalAlignment: IronPdf.Editing.VerticalAlignment.Middle,
        horizontalAlignment: IronPdf.Editing.HorizontalAlignment.Center
    );

    var pdfFile = new PdfFileModel
    {
        FileName = Path.GetFileName(file.FileName),
        ContentType = "application/pdf",
        FileData = pdf.BinaryData,
        UploadedDate = DateTime.UtcNow
    };

    _context.PdfFiles.Add(pdfFile);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}
[HttpPost]
public async Task<IActionResult> UploadWithWatermark(IFormFile file)
{
    if (file is null || file.Length == 0)
        return BadRequest("No file selected.");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    byte[] originalBytes = stream.ToArray();

    // Load the uploaded file into IronPDF
    var pdf = new IronPdf.PdfDocument(originalBytes);

    // Apply an HTML watermark centered on every page
    pdf.ApplyWatermark(
        "<h2 style='color:red;opacity:0.4'>CONFIDENTIAL</h2>",
        rotation: 45,
        opacity: 60,
        verticalAlignment: IronPdf.Editing.VerticalAlignment.Middle,
        horizontalAlignment: IronPdf.Editing.HorizontalAlignment.Center
    );

    var pdfFile = new PdfFileModel
    {
        FileName = Path.GetFileName(file.FileName),
        ContentType = "application/pdf",
        FileData = pdf.BinaryData,
        UploadedDate = DateTime.UtcNow
    };

    _context.PdfFiles.Add(pdfFile);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

<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

    Using stream As New MemoryStream()
        Await file.CopyToAsync(stream)
        Dim originalBytes As Byte() = stream.ToArray()

        ' Load the uploaded file into IronPDF
        Dim pdf = New IronPdf.PdfDocument(originalBytes)

        ' Apply an HTML watermark centered on every page
        pdf.ApplyWatermark(
            "<h2 style='color:red;opacity:0.4'>CONFIDENTIAL</h2>",
            rotation:=45,
            opacity:=60,
            verticalAlignment:=IronPdf.Editing.VerticalAlignment.Middle,
            horizontalAlignment:=IronPdf.Editing.HorizontalAlignment.Center
        )

        Dim pdfFile As New PdfFileModel With {
            .FileName = Path.GetFileName(file.FileName),
            .ContentType = "application/pdf",
            .FileData = pdf.BinaryData,
            .UploadedDate = DateTime.UtcNow
        }

        _context.PdfFiles.Add(pdfFile)
        Await _context.SaveChangesAsync()

        Return RedirectToAction(NameOf(Index))
    End Using
End Function
$vbLabelText   $csharpLabel

Opcje konfiguracji znaku wodnego

Metoda ApplyWatermark firmy IronPDF akceptuje ciąg znaków HTML, co oznacza, że znak wodny może zawierać dowolny poprawny kod HTML i wbudowany CSS — gradienty, niestandardowe czcionki, obrócony tekst, a nawet osadzone ikony SVG. Parametr rotation obraca znak wodny po przekątnej strony, natomiast opacity kontroluje przezroczystość w zakresie od 0 (niewidoczny) do 100 (całkowicie nieprzezroczysty).

Oprócz znaków wodnych ten sam obiekt PdfDocument udostępnia metody dodawania nagłówków i stopek, umieszczania obrazów oraz edycji istniejących pól formularza. Można połączyć wiele etapów przetwarzania przed wywołaniem pdf.BinaryData w celu pobrania końcowej tablicy bajtów.

Jak przesyłać i pobierać pliki PDF w ASP .NET C# za pomocą IronPDF: Obraz 2 – plik PDF z znakiem wodnym, a następnie zapisany w bazie danych

Jak pobrać pliki PDF przechowywane w bazie danych?

Aby przesłać zapisany plik PDF z powrotem do przeglądarki, należy pobrać rekord na podstawie identyfikatora i zwrócić FileResult. Metoda pomocnicza .NET Core File ustawia prawidłowy nagłówek Content-Type i wywołuje okno dialogowe pobierania przeglądarki z oryginalną nazwą pliku.

public async Task<IActionResult> Download(int id)
{
    var pdfFile = await _context.PdfFiles.FindAsync(id);

    if (pdfFile is null)
        return NotFound();

    return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName);
}
public async Task<IActionResult> Download(int id)
{
    var pdfFile = await _context.PdfFiles.FindAsync(id);

    if (pdfFile is null)
        return NotFound();

    return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName);
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Async Function Download(id As Integer) As Task(Of IActionResult)
    Dim pdfFile = Await _context.PdfFiles.FindAsync(id)

    If pdfFile Is Nothing Then
        Return NotFound()
    End If

    Return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName)
End Function
$vbLabelText   $csharpLabel

Wyświetlanie listy plików do pobrania w widoku

Akcja Index pobiera wszystkie zapisane rekordy plików i przekazuje je do widoku Razor. Prosta tabela HTML wyświetla nazwę pliku, datę przesłania oraz link do pobrania dla każdego rekordu.

<table class="content__data-table" data-content-table>
    <caption>Uploaded PDF Files</caption>
    <thead>
        <tr>
            <th>File Name</th>
            <th>Uploaded</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.FileName</td>
                <td>@item.UploadedDate.ToString("yyyy-MM-dd HH:mm")</td>
                <td><a href="/Pdf/Download/@item.Id">Download</a></td>
            </tr>
        }
    </tbody>
</table>
<table class="content__data-table" data-content-table>
    <caption>Uploaded PDF Files</caption>
    <thead>
        <tr>
            <th>File Name</th>
            <th>Uploaded</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.FileName</td>
                <td>@item.UploadedDate.ToString("yyyy-MM-dd HH:mm")</td>
                <td><a href="/Pdf/Download/@item.Id">Download</a></td>
            </tr>
        }
    </tbody>
</table>
$vbLabelText   $csharpLabel

Przeładowanie return File(bytes, contentType, fileName) ustawia zarówno Content-Type: application/pdf, jak i Content-Disposition: attachment; filename="..." nagłówki. Jeśli chcesz, aby przeglądarka otwierała plik PDF bezpośrednio w oknie przeglądarki zamiast wyświetlać monit o pobranie, użyj return File(bytes, contentType) bez trzeciego argumentu — spowoduje to pominięcie instrukcji Content-Disposition: attachment.

Jak przesyłać i pobierać pliki PDF w ASP .NET C# za pomocą IronPDF: Ilustracja 3 – Lista zapisanych plików PDF

Przechowywanie w systemie plików jako alternatywa

W przypadku dużych wdrożeń przechowywanie surowych danych binarnych w bazie danych zwiększa rozmiar wierszy i może spowolnić zapytania. Alternatywą jest zapisanie pliku w katalogu na dysku — lub u dostawcy usług w chmurze — i przechowywanie w bazie danych wyłącznie ścieżki względnej. Zastąp FileData byte[] przez FilePath string, wpisz System.IO.File.WriteAllBytesAsync(path, bytes) podczas przesyłania i odczytaj System.IO.File.ReadAllBytesAsync(path) podczas pobierania. Obie ścieżki zbiegają się w tym samym wywołaniu return File(...) w kontrolerze.

Jak generować dokumenty PDF na żądanie i udostępniać je do pobrania?

Nie musisz ograniczać się do obsługi wcześniej zapisanych plików. Konwersja HTML na PDF w IronPDF pozwala na dynamiczne generowanie dokumentów na podstawie danych w momencie żądania — przydatne w przypadku faktur, raportów, certyfikatów i eksportu danych.

public IActionResult GenerateInvoice(int orderId)
{
    // Build HTML content from your data model
    string html = $@"
        <html>
        <body style='font-family: Arial, sans-serif; padding: 40px;'>
            <h1>Invoice #{orderId}</h1>
            <p>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</p>
            <table border='1' cellpadding='8'>
                <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
                <tr><td>IronPDF License</td><td>1</td><td>$749</td></tr>
            </table>
        </body>
        </html>";

    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
public IActionResult GenerateInvoice(int orderId)
{
    // Build HTML content from your data model
    string html = $@"
        <html>
        <body style='font-family: Arial, sans-serif; padding: 40px;'>
            <h1>Invoice #{orderId}</h1>
            <p>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</p>
            <table border='1' cellpadding='8'>
                <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
                <tr><td>IronPDF License</td><td>1</td><td>$749</td></tr>
            </table>
        </body>
        </html>";

    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
Imports System
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf

Public Class InvoiceController
    Inherits Controller

    Public Function GenerateInvoice(orderId As Integer) As IActionResult
        ' Build HTML content from your data model
        Dim html As String = $"
            <html>
            <body style='font-family: Arial, sans-serif; padding: 40px;'>
                <h1>Invoice #{orderId}</h1>
                <p>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</p>
                <table border='1' cellpadding='8'>
                    <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
                    <tr><td>IronPDF License</td><td>1</td><td>$749</td></tr>
                </table>
            </body>
            </html>"

        Dim renderer As New ChromePdfRenderer()
        Using pdf = renderer.RenderHtmlAsPdf(html)
            Return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Opcje renderowania plików PDF na żądanie

ChromePdfRenderer generuje obraz o pikselowej dokładności, wykorzystując ten sam silnik renderujący Chromium, który zasila przeglądarkę Google Chrome. Oznacza to, że każdy kod CSS, który można wyświetlić w przeglądarce — układy flexbox, siatka, niestandardowe czcionki, wykresy SVG — jest poprawnie renderowany w wygenerowanym pliku PDF. Rozmiar papieru, marginesy i orientację można ustawić za pomocą właściwości RenderingOptions przed wywołaniem RenderHtmlAsPdf.

W przypadku bardziej złożonych dokumentów należy przekazać pełny adres URL do RenderUrlAsPdf zamiast ciągu znaków HTML. IronPDF załaduje stronę w przeglądarce bezinterfejsowej, wykona kod JavaScript, zastosuje style i przekonwertuje w pełni wyrenderowany DOM do formatu PDF. Zapoznaj się z przewodnikiem po konwersji HTML do PDF, aby uzyskać pełny zestaw opcji renderowania, w tym niestandardowe nagłówki, stopki i tokeny numeracji stron.

Jak przesyłać i pobierać pliki PDF w ASP .NET C# za pomocą IronPDF: Obraz 4 – Wygenerowany przykładowy plik PDF

Jak połączyć wiele plików PDF w ASP.NET Core?

Oprócz operacji na pojedynczych plikach może zaistnieć potrzeba połączenia kilku przesłanych dokumentów w jeden. Funkcja łączenia plików PDF w IronPDF akceptuje listę obiektów PdfDocument i zwraca jeden połączony plik.

public async Task<IActionResult> MergeAll()
{
    var allFiles = await _context.PdfFiles.ToListAsync();

    if (allFiles.Count < 2)
        return BadRequest("At least two files are required for merging.");

    var documents = allFiles
        .Select(f => new IronPdf.PdfDocument(f.FileData))
        .ToList();

    using var merged = IronPdf.PdfDocument.Merge(documents);

    return File(merged.BinaryData, "application/pdf", "merged.pdf");
}
public async Task<IActionResult> MergeAll()
{
    var allFiles = await _context.PdfFiles.ToListAsync();

    if (allFiles.Count < 2)
        return BadRequest("At least two files are required for merging.");

    var documents = allFiles
        .Select(f => new IronPdf.PdfDocument(f.FileData))
        .ToList();

    using var merged = IronPdf.PdfDocument.Merge(documents);

    return File(merged.BinaryData, "application/pdf", "merged.pdf");
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Async Function MergeAll() As Task(Of IActionResult)
    Dim allFiles = Await _context.PdfFiles.ToListAsync()

    If allFiles.Count < 2 Then
        Return BadRequest("At least two files are required for merging.")
    End If

    Dim documents = allFiles _
        .Select(Function(f) New IronPdf.PdfDocument(f.FileData)) _
        .ToList()

    Using merged = IronPdf.PdfDocument.Merge(documents)
        Return File(merged.BinaryData, "application/pdf", "merged.pdf")
    End Using
End Function
$vbLabelText   $csharpLabel

Dzielenie stron z pliku PDF

Operacja odwrotna — wyodrębnianie podzbioru stron — wykorzystuje CopyPages. Załaduj PdfDocument z zapisanych bajtów, wywołaj source.CopyPages(startIndex, endIndex) z indeksami stron zaczynającymi się od zera i zwróć wynikowy PdfDocument.BinaryData jako FileResult. Ten wzorzec jest przydatny do podglądu paginacji, dzielenia raportów wieloczęściowych lub wyodrębniania strony tytułowej w celu generowania miniatur. Można również zastosować podpisy cyfrowe do połączonego lub podzielonego pliku wyjściowego przed udostępnieniem go użytkownikom.

Jak bezpiecznie radzić sobie z przesyłaniem dużych plików?

Duże pliki PDF wymagają dodatkowej konfiguracji na poziomie oprogramowania pośredniczącego .NET Core. Domyślnie limit rozmiaru treści żądania wynosi około 28 MB. Aby to zwiększyć, wywołaj builder.Services.Configure<FormOptions>, aby ustawić MultipartBodyLengthLimit oraz builder.WebHost.ConfigureKestrel, aby ustawić Limits.MaxRequestBodySize — oba na żądaną liczbę bajtów, np. 50 * 1024 * 1024 dla 50 MB -- w Program.cs przed builder.Build().

Oprócz ograniczeń rozmiaru, zastosuj te praktyki bezpieczeństwa do każdego punktu końcowego przesyłania: zweryfikuj nagłówek typu zawartości, sprawdź pierwsze bajty strumienia pod kątem magicznej liczby %PDF, przeskanuj w poszukiwaniu osadzonych skryptów za pomocą API kontroli dokumentów IronPDF i przechowuj przetworzone pliki poza katalogiem głównym serwisu, aby nigdy nie były one bezpośrednio udostępniane jako zawartość statyczna. Dokumentacja dotycząca bezpieczeństwa .NET Core obejmuje dodatkowe techniki wzmacniania zabezpieczeń, w tym weryfikację tokenów zabezpieczających przed fałszerstwem oraz integrację skanowania antywirusowego.

Strumieniowe przesyłanie dużych plików w celu uniknięcia obciążenia pamięci

Gdy pliki przekraczają 10 MB, wczytanie całego strumienia do MemoryStream przed przetworzeniem może znacznie zwiększyć zużycie pamięci. Użyj IronPdf.PdfDocument.FromStream, aby w miarę możliwości ładować dane bezpośrednio ze strumienia żądania lub zapisać je w ścieżce pliku tymczasowego i załadować z dysku:

string tempPath = Path.GetTempFileName();
await using (var fs = System.IO.File.Create(tempPath))
{
    await file.CopyToAsync(fs);
}

using var pdf = new IronPdf.PdfDocument(tempPath);
// process...
System.IO.File.Delete(tempPath);
string tempPath = Path.GetTempFileName();
await using (var fs = System.IO.File.Create(tempPath))
{
    await file.CopyToAsync(fs);
}

using var pdf = new IronPdf.PdfDocument(tempPath);
// process...
System.IO.File.Delete(tempPath);
Imports System.IO
Imports IronPdf

Dim tempPath As String = Path.GetTempFileName()

Using fs As FileStream = System.IO.File.Create(tempPath)
    Await file.CopyToAsync(fs)
End Using

Using pdf As PdfDocument = New IronPdf.PdfDocument(tempPath)
    ' process...
End Using

System.IO.File.Delete(tempPath)
$vbLabelText   $csharpLabel

Ten wzorzec pozwala ograniczyć alokację pamięci w stercie i dobrze sprawdza się w kolejkach przetwarzania w tle, gdzie pliki są przetwarzane asynchronicznie po wysłaniu odpowiedzi HTTP. Zapoznaj się z dokumentacją IronPDF, aby poznać dodatkowe wzorce przetwarzania asynchronicznego.

Jakie są Twoje kolejne kroki?

Masz teraz kompletne podstawy do przesyłania, przetwarzania, przechowywania i pobierania plików PDF w aplikacji ASP.NET Core MVC opartej na IronPDF. W tym miejscu warto rozważyć poniższe wskazówki, aby rozszerzyć zakres pracy.

Rozszerz możliwości przetwarzania. IronPDF obsługuje wypełnianie i odczytywanie pól formularzy PDF, wyodrębnianie tekstu i obrazów za pomocą interfejsu API do wyodrębniania tekstu z plików PDF oraz konwersję stron PDF na obrazy w celu wyświetlania miniatur. Każda z tych funkcji integruje się z tym samym wzorcem kontrolera, który pokazano powyżej.

Dodaj podpisy cyfrowe. Przed zapisaniem każdego wygenerowanego lub przesłanego dokumentu podpisz go cyfrowo przy użyciu certyfikatu X.509. Podpisane pliki PDF zawierają metadane zabezpieczające przed manipulacją, które spełniają wiele wymagań dotyczących zgodności.

Skaluj pamięć masową do chmury. Zastąp lokalną kolumnę bazy danych byte[] odniesieniem do usługi Azure Blob Storage lub Amazon S3. Prześlij przetworzone bajty do pamięci w chmurze po dodaniu znaku wodnego i zapisz w bazie danych tylko adres URI — znacznie zmniejsza to rozmiar wierszy w bazie danych i umożliwia dostarczanie treści przez sieć CDN.

Rozpocznij bezpłatny okres próbny. Odwiedź stronę licencji Trial IronPDF, aby uzyskać 30-dniowy klucz ewaluacyjny z pełnym dostępem do funkcji. Możesz również przejrzeć pełny przegląd funkcji IronPDF, aby zrozumieć pełen zakres możliwości PDF dostępnych w Twojej aplikacji .NET, lub zapoznać się ze stroną dotyczącą cen i licencji, gdy będziesz gotowy do wdrożenia produkcyjnego.

Często Zadawane Pytania

Jak mogę przesłać pliki PDF w aplikacji ASP.NET Core MVC?

Aby przesłać pliki PDF w aplikacji ASP.NET Core MVC, można użyć interfejsu IFormFile do przechwycenia danych pliku z formularza, a następnie przetworzyć je po stronie serwera przed zapisaniem, ewentualnie z pomocą IronPDF w celu dalszej obróbki plików PDF.

Jaki jest najlepszy sposób pobierania plików PDF w ASP.NET?

Najlepszym sposobem na pobieranie plików PDF w ASP.NET jest użycie akcji FileResult w kontrolerze. IronPDF może pomóc w generowaniu i modyfikowaniu plików PDF po stronie serwera, aby zapewnić ich gotowość do pobrania.

Czy mogę przechowywać pliki PDF w bazie danych przy użyciu ASP.NET?

Tak, można przechowywać pliki PDF w bazie danych przy użyciu ASP.NET, konwertując plik na tablicę bajtów i zapisując go jako duży obiekt binarny (BLOB). IronPDF może pomóc w przetwarzaniu pliku PDF przed zapisaniem.

W jaki sposób IronPDF pomaga w dodawaniu znaków wodnych do plików PDF w ASP.NET?

IronPDF oferuje funkcję łatwego dodawania tekstowych lub graficznych znaków wodnych do plików PDF, którą można zintegrować z aplikacją ASP.NET w celu modyfikacji dokumentów przed ich pobraniem lub zapisaniem.

Jakie są zalety korzystania z EF Core do przechowywania plików PDF?

EF Core umożliwia wydajne mapowanie obiektowo-relacyjne, ułatwiając zarządzanie przechowywaniem i pobieraniem plików PDF w sposób uporządkowany i skalowalny w ramach aplikacji ASP.NET.

Czy w aplikacjach ASP.NET można modyfikować zawartość plików PDF?

Tak, dzięki IronPDF można modyfikować zawartość plików PDF, w tym edytować tekst, obrazy i metadane, co może być przydatne do dostosowywania dokumentów przed udostępnieniem ich użytkownikom.

Jak bezpiecznie obsługiwać przesyłanie plików w ASP.NET?

Aby bezpiecznie obsługiwać przesyłanie plików w ASP.NET, należy sprawdzać typy plików, ograniczać ich rozmiary i przechowywać je w bezpiecznych lokalizacjach. Korzystanie z bibliotek takich jak IronPDF może również pomóc w zapewnieniu integralności samych plików PDF.

Jakie są typowe wyzwania związane z pracą z plikami PDF w aplikacjach internetowych?

Typowe wyzwania obejmują zapewnienie zgodności plików, obsługę plików o dużych rozmiarach oraz zachowanie integralności dokumentów. IronPDF pomaga je pokonać, zapewniając solidne narzędzia do tworzenia i edycji plików PDF.

Czy w ASP.NET mogę konwertować różne typy plików do formatu PDF?

Tak, IronPDF pozwala na konwersję różnych typów plików, takich jak HTML lub pliki obrazów, na PDFy bezproblemowo w obrębie Twojej aplikacji ASP.NET.

Jaka jest rola Model-View-Controller (MVC) w obsłudze PDFow w ASP.NET?

Wzorzec MVC pomaga w organizacji kodu do obsługi PDFów poprzez oddzielenie obsługi danych (Model), interfejsu użytkownika (View) i logiki aplikacji (Controller), co ułatwia zarządzanie i rozbudowę funkcjonalności PDF.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie