Jak porównać dwa pliki PDF w 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. Uzyj Install-Package IronPdf w konsoli Menedzera pakietow lub uruchom ponizsze polecenia CLI, aby utworzyc nowy projekt MVC i dodac wszystkie wymagane pakiety na raz.
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
Po zainstalowaniu IronPDF udostepnia dostep do ChromePdfRenderer do generowania PDFow z HTML, PdfDocument do ladowania i manipulowania istniejacymi plikami oraz szeregu narzedzi edycyjnych, takich jak znaki wodne, pieczecie i podpisy cyfrowe. Pełną historię wersji i informacje o kompatybilności można znaleźć na stronie pakietu IronPDF NuGet.
Konfiguracja projektu
Dodaj stale dla sciezki przechowywania do Program.cs i zarejestruj swoje ApplicationDbContext w kontenerze wstrzykiwania zaleznosci. Struktura projektu bedzie zawierac Controllers/PdfController.cs, Models/PdfFileModel.cs i Data/ApplicationDbContext.cs przed napisaniem jakiejkolwiek logiki specyficznej dla 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
FileData przechowuje PDF jako obiekt BLOB (duzy obiekt binarny). 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, dodajac wlasciwosc DbSet<PdfFileModel> do 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
Uruchom dotnet ef migrations add InitialCreate, a nastepnie dotnet ef database update, aby utworzyc schemat. Entity Framework Core mapuje byte[] na kolumne varbinary(max) w SQL Server lub kolumne BLOB w SQLite automatycznie — nie jest wymagane reczne SQL.
Jak przesłać pliki PDF w kontrolerze ASP.NET Core?
Akcja kontrolera obslugujaca wgrywanie otrzymuje parametr IFormFile z formularza HTML uzywajac enctype="multipart/form-data". Akcja odczytuje strumien do MemoryStream, konwertuje go na tablice bajtow i utrzymuje wynik przez 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
Weryfikacja przesłanych plików
Zawsze sprawdzaj typ treści przed przetworzeniem. Sprawdzanie file.ContentType zabezpiecza przed przypadkowym wgrywaniem nie-PDFowej tresci przez uzytkownikow. Dla silniejszej walidacji przeczytaj pierwsze cztery bajty strumienia i zweryfikuj magiczny numer PDF (%PDF). Nalezy rowniez wymusic maksymalny rozmiar pliku — zwykle 10 MB dla ogolnych dokumentow — sprawdzajac file.Length przed kopiowaniem strumienia.
Formularz HTML, ktory uruchamia te akcje, potrzebuje dwoch atrybutow: 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" /> i przycisk 'submit' wewnatrz znacznika 'form' wskazujacego na /Pdf/Upload.

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
Opcje konfiguracji znaku wodnego
Metoda ApplyWatermark IronPDF akceptuje lancuch HTML, co oznacza, ze twoj znak wodny moze zawierac dowolny prawidlowy HTML i wbudowane CSS — gradienty, czcionki niestandardowe, obracany tekst czy nawet osadzone ikony SVG. Parametr rotation obraca znak wodny wokol przekatnej strony, podczas gdy opacity kontroluje przezroczystosc od 0 (niewidoczny) do 100 (calkowicie nieprzezroczysty).
Poza znakami wodnymi, ten sam obiekt PdfDocument oferuje metody do dodawania naglowkow i stopki, znakowania obrazow oraz edycji istniejacych pol formularzy. Mozesz polaczyc wiele krokow przetwarzania przed wywolaniem pdf.BinaryData, aby uzyskac ostateczna tablice bajtow.

Jak pobrać pliki PDF przechowywane w bazie danych?
Aby przeslac zapisany PDF z powrotem do przegladarki, pobierz rekord wedlug ID i zwroc FileResult. Pomocnicza metoda File w ASP.NET Core ustawia prawidlowy naglowek Content-Type i uruchamia okno dialogowe pobierania w przegladarce z oryginalna nazwa 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
Wyświetlanie listy plików do pobrania w widoku
Akcja Index pobiera wszystkie zapisane rekordy plikow 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>
Przeciazenie return File(bytes, contentType, fileName) ustawia oba Content-Type: application/pdf i Content-Disposition: attachment; filename="..." nagłówki. Jesli chcesz, aby przegladarka otwierala PDF inline zamiast proponowac pobranie, uzyj return File(bytes, contentType) bez trzeciego argumentu — to pominie instrukcje Content-Disposition: attachment.

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. Zamien FileData byte[] na FilePath string, napisz System.IO.File.WriteAllBytesAsync(path, bytes) podczas przesylania i przeczytaj System.IO.File.ReadAllBytesAsync(path) podczas pobierania. Obie sciezki konverguja na tym samym wywolaniu 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>$999</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>$999</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>$999</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
Opcje renderowania plików PDF na żądanie
ChromePdfRenderer produkuje wyjscie z dokladnoscia do piksela uzywajac tego samego silnika renderujacego Chromium, ktory napedza 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. Mozesz ustawic rozmiar papieru, marginesy i orientacje poprzez wlasciwosc RenderingOptions przed wywolaniem RenderHtmlAsPdf.
Dla bardziej skomplikowanych dokumentow przekaz caly URL do RenderUrlAsPdf zamiast lancucha 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 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. Funkcjonalnosc laczenia PDF IronPDF akceptuje liste obiektow PdfDocument i zwraca pojedynczy polaczony 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
Dzielenie stron z pliku PDF
Operacja odwrotna — wyciaganie podzbioru stron — uzywa CopyPages. Wczytaj PdfDocument z zapisanych bajtow, wywolaj source.CopyPages(startIndex, endIndex) z indeksami stron liczonymi od zera i zwroc 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 zrobic, wywolaj builder.Services.Configure<FormOptions> aby ustawic MultipartBodyLengthLimit i builder.WebHost.ConfigureKestrel aby ustawic Limits.MaxRequestBodySize — oba na pozadana przez ciebie ilosc bajtow, np. 50 * 1024 * 1024 dla 50 MB — w Program.cs przed builder.Build().
Pozostawiajac limity rozmiaru, zastosow te praktyki bezpieczenstwa do kazdego punktu wgrywania: zweryfikuj naglowek typu tresci, sprawdz pierwsze bajty strumienia pod katem magicznego numeru %PDF, przeszukaj osadzone skrypty uzywajac API inspekcji dokumentow IronPDF i przechowuj przetworzone pliki poza katalogiem glownym, aby nie byly nigdy serwowane jako bezposrednia tresc 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 przekraczaja 10 MB, wczytywanie calego strumienia do MemoryStream przed przetwarzaniem moze znaczaco zwiekszyc zuzycie pamieci. Uzyj IronPdf.PdfDocument.FromStream, aby ladowac bezposrednio ze strumienia zadania, o ile to mozliwe, lub zapisz do tymczasowej sciezki pliku i zaladuj 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)
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.
Zwieksz przechowywanie do chmury. Zamien lokalna kolumne bazy danych byte[] na odwolanie do 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.
Bezpłatna próba. 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.

