Vytvořte zabezpečený prohlížeč správy dokumentů v .NET s Doconut
← Back to Blog••5 min read

Vytvořte zabezpečený prohlížeč správy dokumentů v .NET s Doconut

Implementace správy dokumentů s Doconut

Pracovní postup správy dokumentů v .NET portálu obvykle vyžaduje tři věci:

  1. Způsob načtení PDF, Office souborů, CAD výkresů nebo obrázků, aniž byste museli psát prohlížeč od nuly.
  2. Zabezpečený token, který spojuje načtený dokument s aktuální relací prohlížeče.
  3. Krok úklidu, který uvolní paměť, jakmile uživatel skončí.

Doconut poskytuje všechny tři prostřednictvím jediného Viewer služby, lehké IMemoryCache relace a explicitních CloseDocument volání.


1. Zaregistrujte prohlížeč v DI kontejneru

Během spouštění aplikace přidejte služby Doconut do DI kontejneru voláním registrační metody Doconut popsané v oficiální dokumentaci. Tento krok zaregistruje prohlížeč, správu licencí a paměťovou cache, která bude uchovávat relace dokumentů.

Registrace ověřuje licenci při spuštění, takže jakákoli chybějící nebo neplatná licence selže okamžitě a problém poznáte ještě před tím, než první požadavek dorazí na server.


2. Vložte middleware, který poskytuje obrázky stránek, náhledy a data anotací

Nakonfigurujte middleware Doconut v pipeline požadavků tak, aby jakýkoli požadavek obsahující dotazový řetězec ?token= byl zpracován Doconut. Middleware vynucuje výchozí bezpečnostní značku (secure-{token}), když je UnsafeMode false (výchozí) a poskytuje obrázky stránek, náhledy a data anotací.

Umístění middleware na vyhrazenou větev ponechá zbytek pipeline nedotčený a umožní horizontální škálování bez sticky sessions.


3. Otevřete dokument a získejte neprůhledný token relace

Vytvořte jediný koncový bod, který přijímá cestu k souboru (nebo stream) a vrací token. Token je jediná přihlašovací informace, kterou widget klienta kdy vidí.

app.MapPost("/api/open", async (Viewer viewer) =>
{
    // Token je neprůhledný — předávejte jej widgetu, nikdy jej nelogujte ani neukládejte.
    string token = await viewer.OpenDocumentAsync("wwwroot/files/Contract.pdf");
    return Results.Ok(new { token });
});

Co se děje uvnitř OpenDocumentAsync

  1. Licenční brána – neplatná licence okamžitě vyhodí LicenseException.
  2. Vytvoření relace – Doconut vybere správný prohlížeč formátu (PDF, Word, DWG, …) a uloží engine do IMemoryCache pod GUID tokenem.
  3. Registrace zabezpečení – pomocí UnsafeMode = false je token svázán s ASP.NET relací volajícího přes značku secure-{token}. Pouze tato relace prohlížeče může požadovat stránky.
  4. Vrácení tokenu – klient obdrží token a používá jej pro každý následný požadavek (/DocImage.axd?token=…).

Výchozí klouzavá expirace je 60 minut (nastavitelná pomocí DocOptions.TimeOut). Každý požadavek na stránku resetuje časovač, takže nečinné relace zmizí automaticky.


4. Vykreslete dokument na straně klienta

Z prohlížeče zavoláte koncový bod, získáte token a předáte jej widgetu Doconut:

fetch('/api/open', { method: 'POST' })
    .then(r => r.json())
    .then(d => {
        const token = d.token;
        objViewer.View(token);   // JavaScript widget poskytnutý Doconut
    });

Widget interně odesílá požadavky na stránku, náhled, vyhledávání a anotace, které všechny zahrnují stejný token. Protože je token svázán se serverovou relací, škodlivý uživatel nemůže převzít dokument jiného uživatele.


5. Uzavřete dokument, jakmile uživatel opustí prohlížeč

U velkých PDF nebo CAD souborů byste měli okamžitě uvolnit vykreslovací engine. Zavolejte CloseDocument z koncového bodu na serveru nebo z události „unload“ widgetu.

// Server‑side koncový bod
app.MapPost("/api/close", (Viewer viewer, string token) =>
{
    viewer.CloseDocument(token);
    return Results.Ok();
});
// Přímé volání z widgetu (pokud token vystavíte backendu)
viewer.CloseDocument(token);

CloseDocument odstraňuje relaci z cache, uvolňuje podkladový engine dokumentu, maže značku secure-{token} a ruší přístupové oprávnění. Klouzavá expirace by nakonec udělala totéž, ale explicitní uzavření zaručuje, že paměť je uvolněna okamžitě po skončení uživatele.


6. Volitelné: Konverze dokumentu na serveru

Pokud váš pracovní postup vyžaduje export PDF nahraného Word souboru, povolte plugin Converter v konfiguraci Doconut (viz dokumentace). Po registraci pluginu můžete injektovat DocumentConverter a zavolat jeho metodu ConvertAsync. Konverze běží na serveru, takže nikdy nebudete potřebovat Office nainstalovaný na webovém serveru.


7. Úvahy o škálování pro enterprise‑grade správu dokumentů

  • Stateless front‑ends – Widget prohlížeče nikdy neuchovává data dokumentu; veškeré těžké operace zůstávají na serveru.
  • Distribuovaná cache – Nahraďte výchozí paměťovou cache distribuovaným poskytovatelem (Redis, NCache), pokud provozujete více uzlů web‑farmy. Mapování token‑na‑relaci funguje beze změny, protože middleware čte z nakonfigurovaného IMemoryCache.
  • Background úlohy – Můžete předotevřít dokumenty v background workeru, uložit token do cache a předat jej UI později. Jen si pamatujte, že každý token je jednorázový na relaci; opětovné použití vyžaduje čerstvé volání OpenDocumentAsync.

Tyto vzory vám umožní vytvořit platformu správy dokumentů, která škáluje od jednoserverového intranet portálu po multi‑regionální cloudovou službu, aniž byste museli přepisovat logiku prohlížeče.


8. Rychlý kontrolní seznam pro produkčně připravenou implementaci

KrokAkce
1Zaregistrujte služby Doconut v Program.cs (ověřte licenci).
2Přidejte middleware Doconut na vyhrazenou větev.
3Zveřejněte /api/open koncový bod, který volá OpenDocumentAsync.
4Předejte vrácený token do objViewer.View(token) na klientovi.
5Zavolejte CloseDocument(token), když je prohlížeč skrytý nebo se stránka unloaduje.
6(Volitelné) Povolit ConverterPlugin, pokud potřebujete konverzi na serveru.
7(Volitelné) Vyměnit IMemoryCache za distribuovanou cache pro horizontální škálování.

Postupujte podle seznamu a získáte kompletní, zabezpečený, vysoce výkonný tok správy dokumentů postavený na nativním .NET prohlížeči Doconut.

#document management#.NET#document viewer#Doconut#secure rendering#správa dokumentů#prohlížeč dokumentů#zabezpečené vykreslování