
สร้างตัวดูการจัดการเอกสารที่ปลอดภัยใน .NET ด้วย Doconut
การนำการจัดการเอกสารไปใช้กับ Doconut
กระบวนการ การจัดการเอกสาร ในพอร์ทัล .NET มักต้องการสามสิ่ง:
- วิธีการโหลด PDF, ไฟล์ Office, ภาพวาด CAD หรือรูปภาพโดยไม่ต้องเขียนตัวดูจากศูนย์.
- โทเค็นที่ปลอดภัยซึ่งเชื่อมเอกสารที่โหลดกับเซสชันเบราว์เซอร์ปัจจุบัน.
- ขั้นตอนทำความสะอาดที่ปลดปล่อยหน่วยความจำทันทีที่ผู้ใช้เสร็จสิ้น.
Doconut ให้บริการทั้งสามผ่านบริการ Viewer เดียว, เซสชัน IMemoryCache ที่มีน้ำหนักเบา, และการเรียกใช้ CloseDocument อย่างชัดเจน.
1. ลงทะเบียนตัวดูในคอนเทนเนอร์ DI
ในช่วงเริ่มต้นแอปพลิเคชัน ให้เพิ่มบริการ Doconut ไปยังคอนเทนเนอร์ DI โดยเรียกวิธีการลงทะเบียนของ Doconut ตามที่อธิบายในเอกสารอย่างเป็นทางการ ขั้นตอนนี้จะลงทะเบียนตัวดู, การจัดการใบอนุญาต, และแคชในหน่วยความจำที่ใช้เก็บเซสชันเอกสาร.
การลงทะเบียนจะตรวจสอบใบอนุญาตในช่วงเริ่มต้น ดังนั้นใบอนุญาตที่หายหรือไม่ถูกต้องจะล้มเหลวอย่างรวดเร็วและคุณจะทราบปัญหาก่อนที่คำขอแรกจะเข้าถึงเซิร์ฟเวอร์.
2. แทรก middleware ที่ให้บริการภาพหน้า, รูปย่อ, และข้อมูลคำอธิบาย
กำหนดค่า middleware ของ Doconut ใน pipeline ของคำขอเพื่อให้คำขอใด ๆ ที่มีสตริง query ?token= ถูกจัดการโดย Doconut middleware จะบังคับใช้ตัวบ่งชี้ความปลอดภัยเริ่มต้น (secure-{token}) เมื่อ UnsafeMode เป็น false (ค่าเริ่มต้น) และให้บริการภาพหน้า, รูปย่อ, และข้อมูลคำอธิบาย.
การวาง middleware บนสาขาเฉพาะจะทำให้ส่วนที่เหลือของ pipeline ของคุณไม่ถูกกระทบและอนุญาตการสเกลแนวนอนโดยไม่ต้องใช้เซสชันแบบ sticky.
3. เปิดเอกสารและรับโทเค็นเซสชันที่ไม่โปร่งใส
สร้าง endpoint เดียวที่รับเส้นทางไฟล์ (หรือสตรีม) และส่งคืนโทเค็น โทเค็นเป็นข้อมูลประจำตัวเดียวที่วิดเจ็ตของไคลเอนต์จะเห็น.
app.MapPost("/api/open", async (Viewer viewer) =>
{
// โทเคนเป็นแบบไม่เปิดเผย — ส่งให้วิดเจ็ต, อย่าเก็บบันทึกหรือบันทึกค้างไว้
string token = await viewer.OpenDocumentAsync("wwwroot/files/Contract.pdf");
return Results.Ok(new { token });
});
สิ่งที่เกิดขึ้นภายใน OpenDocumentAsync
- ประตูใบอนุญาต – ใบอนุญาตที่ไม่ถูกต้องจะโยน
LicenseExceptionทันที. - การสร้างเซสชัน – Doconut เลือกตัวดูรูปแบบที่เหมาะสม (PDF, Word, DWG, …) และเก็บเอนจินไว้ใน
IMemoryCacheภายใต้โทเค็น GUID. - การลงทะเบียนความปลอดภัย – ด้วย
UnsafeMode = falseโทเค็นจะถูกผูกกับเซสชัน ASP.NET ของผู้เรียกผ่านตัวบ่งชี้secure-{token}เซสชันเบราว์เซอร์นั้นเท่านั้นที่สามารถขอหน้าต่างได้. - การส่งคืนโทเค็น – ไคลเอนต์รับโทเค็นและใช้มันสำหรับทุกคำขอถัดไป (
/DocImage.axd?token=…).
ค่าเริ่มต้นของการหมดอายุแบบเลื่อนคือ 60 นาที (สามารถกำหนดค่าได้ผ่าน DocOptions.TimeOut) ทุกคำขอหน้ารีเซ็ตนาฬิกา ทำให้เซสชันที่ไม่มีการใช้งานหายไปโดยอัตโนมัติ.
4. แสดงเอกสารบนฝั่งไคลเอนต์
จากเบราว์เซอร์คุณเรียก endpoint, ดึงโทเค็น, และส่งให้วิดเจ็ตของ Doconut:
fetch('/api/open', { method: 'POST' })
.then(r => r.json())
.then(d => {
const token = d.token;
objViewer.View(token); // วิดเจ็ต JavaScript ที่จัดหาโดย Doconut
});
วิดเจ็ตจะส่งคำขอหน้า, รูปย่อ, การค้นหา, และคำอธิบายภายในที่รวม token เดียวกัน เนื่องจากโทเค็นผูกกับเซสชันฝั่งเซิร์ฟเวอร์ ผู้ใช้ที่เป็นอันตรายไม่สามารถขโมยเอกสารของผู้ใช้คนอื่นได้.
5. ปิดเอกสารทันทีที่ผู้ใช้ออกจากตัวดู
สำหรับ PDF หรือไฟล์ CAD ขนาดใหญ่ คุณควรปล่อยเอนจินการเรนเดอร์ทันที เรียก CloseDocument จาก endpoint ฝั่งเซิร์ฟเวอร์หรือจากเหตุการณ์ “unload” ของวิดเจ็ต.
// จุดเชื่อมต่อด้านเซิร์ฟเวอร์
app.MapPost("/api/close", (Viewer viewer, string token) =>
{
viewer.CloseDocument(token);
return Results.Ok();
});
// การเรียกโดยตรงจากวิดเจ็ต (หากคุณเปิดเผยโทเคนต่อ backend)
viewer.CloseDocument(token);
CloseDocument จะลบเซสชันออกจากแคช, ทำลายเอนจินเอกสารพื้นฐาน, ลบตัวบ่งชี้ secure-{token}, และเพิกถอนการให้สิทธิ์การเข้าถึง การหมดอายุแบบเลื่อนจะทำเช่นเดียวกันในภายหลัง แต่การปิดอย่างชัดเจนรับประกันว่าหน่วยความจำจะถูกคืนทันทีที่ผู้ใช้เสร็จสิ้น.
6. ตัวเลือก: แปลงเอกสารบนเซิร์ฟเวอร์
หากกระบวนการของคุณต้องการส่งออก PDF ของไฟล์ Word ที่อัปโหลด ให้เปิดใช้งานปลั๊กอิน Converter ในการกำหนดค่า Doconut (ดูเอกสาร) หลังจากลงทะเบียนปลั๊กอินแล้วคุณสามารถฉีด DocumentConverter และเรียกวิธี ConvertAsync ของมัน การแปลงจะทำงานบนเซิร์ฟเวอร์ ดังนั้นคุณไม่จำเป็นต้องติดตั้ง Office บนเว็บเซิร์ฟเวอร์.
7. พิจารณาการสเกลสำหรับการจัดการเอกสารระดับองค์กร
- Front‑ends แบบไม่มีสถานะ – วิดเจ็ตตัวดูไม่เคยเก็บข้อมูลเอกสาร; งานหนักทั้งหมดอยู่บนเซิร์ฟเวอร์.
- แคชแบบกระจาย – แทนที่แคชในหน่วยความจำเริ่มต้นด้วยผู้ให้บริการแบบกระจาย (Redis, NCache) หากคุณรันหลายโหนดเว็บ‑ฟาร์ม การแมปโทเค็น‑ไป‑เซสชันทำงานโดยไม่เปลี่ยนแปลงเนื่องจาก middleware อ่านจาก
IMemoryCacheที่กำหนดค่า. - งานเบื้องหลัง – คุณสามารถเปิดเอกสารล่วงหน้าใน worker เบื้องหลัง, แคชโทเค็น, และส่งให้ UI ภายหลัง เพียงจำไว้ว่าโทเค็นแต่ละอันใช้ครั้งเดียวต่อเซสชัน; การใช้ซ้ำต้องเรียก
OpenDocumentAsyncใหม่.
รูปแบบเหล่านี้ทำให้คุณสร้างแพลตฟอร์ม การจัดการเอกสาร ที่สเกลจากพอร์ทัลอินทราเน็ตเซิร์ฟเวอร์เดียวไปยังบริการคลาวด์หลายภูมิภาคโดยไม่ต้องเขียนตรรกะตัวดูใหม่.
8. รายการตรวจสอบอย่างรวดเร็วสำหรับการใช้งานพร้อมผลิต
| ขั้นตอน | การกระทำ |
|---|---|
| 1 | ลงทะเบียนบริการ Doconut ใน Program.cs (ตรวจสอบใบอนุญาต). |
| 2 | เพิ่ม middleware ของ Doconut บนสาขาเฉพาะ. |
| 3 | เปิดเผย endpoint /api/open ที่เรียก OpenDocumentAsync. |
| 4 | ส่งโทเค็นที่ส่งคืนให้กับ objViewer.View(token) ในไคลเอนต์. |
| 5 | เรียก CloseDocument(token) เมื่อวิดเจ็ตถูกซ่อนหรือหน้าเว็บ unload. |
| 6 | (ตัวเลือก) เปิดใช้งาน ConverterPlugin หากคุณต้องการการแปลงฝั่งเซิร์ฟเวอร์. |
| 7 | (ตัวเลือก) สลับ IMemoryCache เพื่อใช้แคชแบบกระจายสำหรับการสเกลแนวนอน. |
ทำตามรายการนี้ แล้วคุณจะมีกระบวนการ การจัดการเอกสาร ที่สมบูรณ์, ปลอดภัย, มีประสิทธิภาพสูง สร้างบนตัวดู .NET เนทีฟของ Doconut.