สร้างตัวดูการจัดการเอกสารที่ปลอดภัยใน .NET ด้วย Doconut
← Back to Blog••2 min read

สร้างตัวดูการจัดการเอกสารที่ปลอดภัยใน .NET ด้วย Doconut

การนำการจัดการเอกสารไปใช้กับ Doconut

กระบวนการ การจัดการเอกสาร ในพอร์ทัล .NET มักต้องการสามสิ่ง:

  1. วิธีการโหลด PDF, ไฟล์ Office, ภาพวาด CAD หรือรูปภาพโดยไม่ต้องเขียนตัวดูจากศูนย์.
  2. โทเค็นที่ปลอดภัยซึ่งเชื่อมเอกสารที่โหลดกับเซสชันเบราว์เซอร์ปัจจุบัน.
  3. ขั้นตอนทำความสะอาดที่ปลดปล่อยหน่วยความจำทันทีที่ผู้ใช้เสร็จสิ้น.

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

  1. ประตูใบอนุญาต – ใบอนุญาตที่ไม่ถูกต้องจะโยน LicenseException ทันที.
  2. การสร้างเซสชัน – Doconut เลือกตัวดูรูปแบบที่เหมาะสม (PDF, Word, DWG, …) และเก็บเอนจินไว้ใน IMemoryCache ภายใต้โทเค็น GUID.
  3. การลงทะเบียนความปลอดภัย – ด้วย UnsafeMode = false โทเค็นจะถูกผูกกับเซสชัน ASP.NET ของผู้เรียกผ่านตัวบ่งชี้ secure-{token} เซสชันเบราว์เซอร์นั้นเท่านั้นที่สามารถขอหน้าต่างได้.
  4. การส่งคืนโทเค็น – ไคลเอนต์รับโทเค็นและใช้มันสำหรับทุกคำขอถัดไป (/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.


#document management#.NET#document viewer#Doconut#secure rendering#การจัดการเอกสาร#ตัวดูเอกสาร#การเรนเดอร์ที่ปลอดภัย