文件 预览与查看器
预览与查看器
详情中以小尺寸显示文件;双击或按 Enter 会在网盘之上完整显示,用 ← 和 → 切换到下一个。
本页内容
显示哪些内容
| 类型 | 在详情中 | 在查看器中 |
|---|---|---|
| 图片 | 能填满区域的最小副本 | 适应窗口,点击查看实际大小 |
| Word 文档 | 标题和开头几段,或第一页 | 逐页或全部显示;Rebodocs 的缩放;打印 |
| 由浏览器显示第一页 | 浏览器自带的查看器 | |
| 视频、音频 | — | 播放 |
| Excel 工作簿(.xlsx) | 卡片上显示前几行 | 每个工作表显示为表格 |
| 文本、Markdown、CSV、JSON、代码 | 开头部分 | 完整显示,有大小上限 |
四种尺寸的图片
上传图片时,页面会按网盘设置中的尺寸生成副本,除非设置为保留原格式,否则使用 JPEG;原图保持原样。
createDriveHandler({
...options,
// Or from the settings of the drive, under Pictures.
settings: { images: { enabled: true, sizes: [160, 480, 1024, 2048], format: 'jpeg', quality: 0.85 } },
});网格读取 160 或 480 的副本,详情读取 480,查看器读取 2048;download?size= 会返回在该尺寸下能显示图片的最小副本。
加载时先模糊显示
每张图片都有一个极小的副本,最长边 16 像素,以几百字节的 data: URL 形式随版本保存。网格、详情和查看器会在图片的位置下方以模糊方式显示它,直到图片加载完成。Word 文档的第一页也是如此。
有效期一小时的地址
用于在页面中显示文件的地址从整点开始签名,整个小时内保持相同,有效期两小时,并带有 Cache-Control: private, max-age=7200:浏览器会缓存已读取过的缩略图。网格通过一次请求(POST /urls)获取所有地址,过期的地址会重新获取。
由服务器生成
不是来自页面的内容(助手、同步、脚本),以及页面不会生成的内容(PDF 的第一页):在保存后片刻由服务器生成。
import { createDriveHandler } from '@rebofiles/server';
import { deriveAll } from '@rebofiles/server/derive';
// npm install sharp pdfjs-dist @napi-rs/canvas (each only for what it makes)
createDriveHandler({ ...options, derive: deriveAll() });pictures():用sharp生成网盘各尺寸的图片(不会大于原图)及其占位图。pdf():用pdfjs-dist和@napi-rs/canvas绘制 PDF 第一页,并提取前五十页的文字用于搜索。docx()、xlsx()和text():用 Rebodocs 读取 Word 文档的文字,读取 Excel 工作簿的单元格,以及文本文件的文字。video()(传给deriveAll(…)):用 ffmpeg 截取视频的一帧,生成网盘的各个尺寸。
页面会说明自己生成了什么,服务器只生成其余部分;每个库在首次需要时才加载,因此只需安装用到的库。页面会根据事件显示新生成的内容。
图片中的文字
收据照片、扫描的合同:由 Tesseract 识别其中的文字后即可搜索。deriveAll() 默认不包含它,因为首次使用时会下载语言数据。
import { deriveAll, docx, ocr, pdf, pictures, text, xlsx } from '@rebofiles/server/derive';
// npm install tesseract.js (the data of each language is fetched once, then kept)
createDriveHandler({
...options,
derive: deriveAll(pictures(), pdf(), docx(), xlsx(), text(), ocr({ languages: ['eng', 'spa'] })),
});ocr() 读取图片,以及没有文字层的 PDF 的前几页(在 pdf() 之后运行,有文字的 PDF 由 pdf() 读取)。langPath 和 cachePath 指定语言数据的来源和保存位置。