
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:
- Způsob načtení PDF, Office souborů, CAD výkresů nebo obrázků, aniž byste museli psát prohlížeč od nuly.
- Zabezpečený token, který spojuje načtený dokument s aktuální relací prohlížeče.
- 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
- Licenční brána – neplatná licence okamžitě vyhodí
LicenseException. - Vytvoření relace – Doconut vybere správný prohlížeč formátu (PDF, Word, DWG, …) a uloží engine do
IMemoryCachepod GUID tokenem. - Registrace zabezpečení – pomocí
UnsafeMode = falseje token svázán s ASP.NET relací volajícího přes značkusecure-{token}. Pouze tato relace prohlížeče může požadovat stránky. - 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
| Krok | Akce |
|---|---|
| 1 | Zaregistrujte služby Doconut v Program.cs (ověřte licenci). |
| 2 | Přidejte middleware Doconut na vyhrazenou větev. |
| 3 | Zveřejněte /api/open koncový bod, který volá OpenDocumentAsync. |
| 4 | Předejte vrácený token do objViewer.View(token) na klientovi. |
| 5 | Zavolejte 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.