背景
在Web开发中,有时需要实现在线预览各种文件的功能,如Word、Excel、PDF等。传统的做法是,先在服务器端将文件转换成HTML格式,然后在客户端以HTML的方式打开,这种方式虽然可行,但是需要服务器的大量计算资源,在大量文件上传的情况下,服务器压力会很大。这里介绍一种新的方式,即使用HTML5提供的object
标签,让浏览器自己渲染文件,而不需要依赖服务器的转换。
技术方案
实现在线预览Word、Excel和PDF等文件的核心就是object
标签,这个标签可以将不同种类的文件以嵌入方式呈现在HTML页面上。object标签如下:
<object data="文件路径" type="文件类型">
<embed src="文件路径" type="文件类型"></embed>
</object>
其中,data属性指定文件路径,type属性指定文件类型。如果浏览器不支持object
标签,那么就使用embed
标签来替代渲染。
Word文件预览
如果要预览Word文件,需要使用微软提供的Office Web Viewer
,该工具可以将Word、Excel、PowerPoint等各种文件转换成HTML格式,可以通过简单的URL就能访问。下面是一个使用object
标签和Office Web Viewer
预览Word文件的示例代码:
<object data="https://view.officeapps.live.com/op/view.aspx?src=http://example.com/example.docx" type="application/vnd.ms-word">
<embed src="https://view.officeapps.live.com/op/view.aspx?src=http://example.com/example.docx" type="application/vnd.ms-word"></embed>
</object>
注意,为了安全起见,需要将src
参数的值设置为一个绝对路径,否则可能会因为浏览器的安全限制无法访问资源。
Excel文件预览
如果要预览Excel文件,同样需要使用Office Web Viewer
,只需要将类型参数修改成application/vnd.ms-excel
即可。示例代码如下:
<object data="https://view.officeapps.live.com/op/view.aspx?src=http://example.com/example.xlsx" type="application/vnd.ms-excel">
<embed src="https://view.officeapps.live.com/op/view.aspx?src=http://example.com/example.xlsx" type="application/vnd.ms-excel"></embed>
</object>
PDF文件预览
如果要预览PDF文件,可以使用pdf.js
,这是一个由Mozilla开发的用于在浏览器中渲染PDF文件的JavaScript库。下面是一个使用object
标签和pdf.js
预览PDF文件的示例代码:
<object data="https://example.com/example.pdf" type="application/pdf">
<embed src="https://example.com/example.pdf" type="application/pdf"></embed>
</object>
同时,还需要在页面中引用pdf.js
库:
<script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>
其他文件预览
对于其他类型的文件,可以使用Google提供的Google Docs Viewer
,大部分文件类型都能够通过这个工具进行预览,使用方式与Office Web Viewer
类似,示例代码如下:
<object data="https://docs.google.com/viewer?url=http://example.com/example.zip" type="application/octet-stream">
<embed src="https://docs.google.com/viewer?url=http://example.com/example.zip" type="application/octet-stream"></embed>
</object>
需要注意的是,Google Docs Viewer
最多只能预览20MB大小的文件。
总结
使用HTML5提供的object
标签,可以很方便地实现在线预览各种文件的功能,避免了服务器的大量计算,同时也减轻了服务器的压力。理解这种实现方式的原理,能够为Web开发者提供更多的解决方案。