我正在构建一个 ASPX 网站,该网站应允许用户下载 CSV/Excel 文件(包括“保存到”对话框)。 CSV 包含加密数据 - 解密 key 在用户端可用,并且应对 Web 服务保密。 因此解密实际上应该在浏览器中执行,JavaScript 实现(sjcl)已被证明可以正常工作。 但是文件下载期间传入的数据流会受到怎样的影响呢?像浏览器托管代理执行 JavaScript 解密之类的东西?
@closure:非常感谢! Ajax没问题,思路
<a href='data:application/csv;base64,aGVsbG87d29ybGQNCg=='>click</a>
确实很酷,但它有两个问题:它似乎不适用于 IE,而且对于非常大的表来说,它不是正确的方法。该解决方案应该能够处理数千条记录,因此我们需要某种下载流编码器/解密器。
最佳答案
以下是实现此目标的步骤:
- 不要将 CSV 直接下载到客户端计算机,而是通过 ajax 获取
- 通过 Ajax 接收数据后,通过互联网上的许多可用函数解析 CSV。如果您需要这方面的帮助,请告诉我。此函数会将 CSV 转换为 native Javascript 数组。
- 遍历数组并将加密数据转换为未加密数据。在同一个数组中本地执行此操作。
- 将数组转换为 CSV(同样有公共(public)领域的函数)
- 创建链接(元素)并将 href 设置为本地数据,例如
data:text/csv;charset=utf-8, +encodeURIComponent(csv)
- 向用户提供此链接并要求他点击该链接以在本地保存文件。
关于下载期间的 Javascript 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14004986/