您可以在 ASP.NET Core、MVC 或 WebForms 应用程序中嵌入无插件文档查看器,而无需让任何用户安装任何东西。
提供合同、图纸或设计资产的企业需要一种遵守公司安全策略且永不强制用户安装旧版浏览器插件的查看器。Doconut 提供用于基于浏览器的 PDF、Office、CAD、电子邮件和图像工作流的 .NET 文档查看器 SDK。它不是您调用的托管服务:您将其安装到自己的应用程序中,并在其中渲染。本篇文章概述了集成决策,而不依赖于特定版本的示例代码。
首先需要澄清一点,因为这两个产品很容易混淆。Doconut.app 是免费网页查看器——一次打开一个文件,在浏览器标签页中查看,随后被删除。它不是可嵌入的东西。您嵌入的是 Doconut Viewer,即 SDK,以下内容均围绕它展开。

1. 为什么安全性和零插件渲染对 .NET Web 应用程序很重要
现代企业将每个文档视为潜在的数据泄露风险。当您嵌入依赖 ActiveX、Flash 或本机客户端的查看器时,会产生三大风险:
| 风险 | 对您的 .NET 应用程序的影响 | Doconut App 如何消除该风险 |
|---|---|---|
| 插件依赖 | 用户必须安装或启用浏览器插件,导致支持工单和合规性问题。 | Doconut 完全在 HTML5/Canvas 中运行,无需 任何插件。 |
| 未加密传输 | 文件通过 HTTP 传输或以明文存储,违反 GDPR、HIPAA 或内部政策。 | SDK 在您的应用程序内部运行,因此传输和存储仍受您已实施的 TLS 和加密策略的约束。Doconut 不会增加新的中转。 |
| 不可控的生命周期 | 文件可能在服务器上残留,增加泄露风险。 | 保留策略由您自行设定,因为文档永不离开您的环境。临时渲染输出写入您配置的位置,并按您的计划清理。 |
值得注意的架构事实是,SDK 安装在您自己的环境中,且不向 Doconut 服务器发起任何调用。没有任何内容上传至我们这里,因此不存在需要加入数据映射的第三方处理器,也无需与您自己的供应商保留政策进行对账。
2. 准备 .NET 项目
使用与项目所选 Doconut 版本匹配的包、文档和示例。官方的 Doconut download page 是可靠的起点。
在集成之前,确认目标 .NET 运行时,记录包版本,将许可证配置置于源码控制之外,并使用具有代表性的文档进行测试。ASP.NET Core、MVC 和 WebForms 的应用生命周期各不相同,因而它们的设置不应视为相同。
3. 构建安全的上传端点 – AES‑256、SSL 与自动删除
SDK 可以从物理路径、流、字节数组、数据库、URL、内网位置或诸如 S3、Azure Storage、Google Cloud 或 Dropbox 等云提供商读取文档。它绝不应读取由浏览器选择的路径。请在请求与文档之间加入授权检查,无论来源为何。下面是 ASP.NET Core 中常见的端点实现形式;相同思路同样适用于 MVC 和 WebForms。
// 示例代码保持原样,不进行翻译
服务器端工作流
- 接受上传的文件 – 使用标准
IFormFile(或 WebForms 中的HttpPostedFile)从客户端接收文档。 - 使用 AES‑256 加密文件 – 在持久化流之前,使用诸如
System.Security.Cryptography.Aes的成熟库进行加密。将加密后的 blob 存储在安全位置(例如启用了服务器端加密的 Azure Blob Storage,或使用 SSE‑AES256 的 S3 存储桶)。 - 生成短期签名 URL – 创建一个有效期只有几分钟的 URL(例如 5 分钟)。该 URL 应为 HTTPS,并包含 Doconut 能够验证的加密令牌。大多数云存储提供商都提供符合此需求的“预签名 URL”功能。
- 将签名 URL 返回给客户端 – 发送包含该 URL 的 JSON 响应。客户端会将此 URL 交给 Doconut 查看器。
- 安排自动删除 – 在签名 URL 失效后,后台任务(Hangfire、Azure Functions 等)会删除加密的 blob,确保文件不再保留在服务器上。
MVC / WebForms 等价实现
- MVC – 将相同的逻辑放在普通的控制器动作中,并返回
JsonResult。 - WebForms – 实现
.ashx处理程序或页面方法,遵循相同步骤:接收Request.Files[0],加密,生成预签名 URL,并写入 JSON 响应。
唯一的区别在于路由语法;安全工作流保持一致。
4. 通过已安装的 SDK 渲染文档
在服务器上保持文档访问,并在处理文件或流之前强制授权。具体的渲染和 UI 初始化顺序取决于版本;请遵循随已安装构建一起提供的官方文档,而不是复制未经验证的全局 JavaScript API。
为什么这适用于所有 .NET 版本
- ASP.NET Core Razor – 初始化位于承载上传表单的同一视图中,因此只有一个页面需要考虑。
- MVC – 使用
@section Scripts注入相同的代码片段;控制器返回的 JSON 可被 MVC 的$.ajax消费。 - WebForms – 在上传完成后使用
ClientScript.RegisterStartupScript注册脚本,然后以相同方式调用launchViewer。
渲染在服务器上进行,这正是其意义所在:浏览器收到的是渲染后的页面,而不是源文档,这就是即使机器上没有 AutoCAD 或 Photoshop,也能打开 DWG 或 PSD 的原因。请相应地为服务器配置容量——扫描的 300 页 PDF 属于真实工作负载,而现在由你的服务器层来完成。
5. 定制查看器以匹配你的门户
企业通常需要查看器看起来像其所在产品的一部分,而不是别人的窗口。查看器的外观及其提供的控件集合是可配置的,具体选项取决于你安装的构建版本。
请从随你版本一起提供的文档中获取这些选项名称,而不是从博客文章中获取。查看器配置界面正是那种在不同版本之间会被重命名的内容,从两代前的文章中复制的代码片段会以类似授权问题的方式失效。
在打开文档之前值得先决定的是每个角色应看到哪些控件。用户是否可以打印、下载,或仅浏览文档页数,是你的应用已经知道答案的权限问题。根据该答案配置查看器,而不是暴露所有控件并希望没有人点击。
6. 性能与可扩展性 – 保持流畅体验
在高流量门户中嵌入查看器会带来两个实际关注点:加载时间 和 并发渲染。Doconut App 开箱即用地解决了这两点,但你可以通过一些 .NET 特有的技巧进一步提升性能。
| 关注点 | 解决方案 |
|---|---|
| 首屏延迟 | 页面自动加载让阅读器在其余内容仍在准备时即可看到第一页。启用静态文件压缩(app.UseResponseCompression())并缓存客户端资源。 |
| 同一文件的重复查看 | 经常被打开的文档可以只渲染一次,然后从缓存输出提供,而不是每次请求都重新渲染。FAQ 中介绍了专门用于此的 .DCN 选项。 |
| 渲染成本 | 渲染是服务器端工作。降低对画质要求不高的图像分辨率是最有效的单一手段,这属于配置修改而非代码改动。 |
| 并发性 | 在负载下检查超时和 AutoClose 设置,并在假设单节点足够之前阅读 Web 农场示例。对上传端点进行限流。 |
使用自己的文档进行测量。一个 5 MB 的文本型 PDF 与同报告的 5 MB 扫描件表现截然不同,且只有其中一种会出现在合成基准测试中。
关键要点
- Doconut Viewer 是一个无需插件的 .NET SDK,兼容 ASP.NET Core、MVC 和 WebForms。您的用户无需安装任何东西。
- 它安装在您自己的环境中,不会调用 Doconut 服务器,因此文档始终保留在您已控制的边界内。
- 传输安全、静态加密和保留策略由您自行设置,因为文件从不离开您的基础设施。Doconut 不会在您的数据映射中成为处理者。
- SDK 目录包含 75 种文件扩展名,跨越 18 大类——PDF、Office、CAD、Visio、Project、电子邮件、电子书和图像,并通过其专属插件支持 DICOM。
- 渲染在服务器上进行。这正是让浏览器能够打开 DWG 的原因,也是需要考虑规模的项目。
- 用户看到的控制项——打印、下载或仅分页——应遵循您应用程序已有的权限。
- 请从您所安装版本的文档中获取配置选项名称,切勿依据文章内容。
常见问题
Q1: 我需要在服务器上安装什么吗?
A: 是的。Doconut Viewer 是一个 .NET SDK,您将其安装到自己的应用程序中——从下载页面开始,并使用您所选版本的包和文档。没有可调用的托管端点,也没有任何内容来自 Doconut CDN。
Q2: 谁在查看后删除文件?
A: 由您自行删除。由于文档及任何临时渲染输出都位于您的环境中,保留策略是您应用程序的设置,而非供应商的承诺。在投入生产之前,请决定临时文件的写入位置以及由谁负责删除。
Q3: 用户可以打印文档吗?
A: 打印是查看器的功能,可根据用户授予或限制。请注意,受控打印是查看器本身的一部分——它不属于四个授权插件之一,这四个插件是 Annotation、Converter、DICOM 和 Search。
Q4: 它能将文档转换为其他格式吗?
A: 这属于 Converter 插件,需要单独授权。查看和转换是不同的产品,明确工作流实际需要哪一个非常重要。
准备在您的 .NET 应用程序中嵌入零插件文档查看器了吗?请从Doconut 下载页面开始——试用许可证是免费的。如果您只是想今天打开一个文件,Doconut.app 可以在浏览器标签页中完成,并在随后删除文件。