Ajax实现二进制文件下载

今天上课老师给了个电子书的下载连接,打开后需要输入提取码才能下载,也就是使用POST的方式下载文件。Ajax是可以完成POST请求的,很早就听过这个概念,这次就打算写两行切身感受一下。

w3c上的例子都是Get请求;常用于Ajax的XmlHttpRequest限制于文本字符的传输,而现在要使用POST完成二进制文件(.rar)的下载。最初我想弹出IE那个下载对话框的,但因为下午时间不多,就直接把下载的数据用Adodb.Stream写到硬盘上了。

思路很简单,填写POST请求的url为目标地址(我是通过网络数据包侦听获得的,当然查看网页源代码也能看到),再来就是填写send的参数(也就是POST时的参数,比如我这里为passwd=1912)。但由于获取的文件是二进制形式,所以获取数据不能从XmlHttpRequest.responseText获取,会被截断。要用responseBody(为一个ByteArray,直接写入硬盘就行)。

(发现IE8的脚本调试功能调js挺方便)获得请求后,二进制数据用Scripting.FileSystemObject不好直接写入文件(特殊字符),所以还是用ADODB.Stream来写,具体的看代码就明白了。另外ADODB.Stream对象可能会加载失败。解决办法:注册表HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> InternetExplorer -> ActiveXCompatibility -> 00000566-0000-0010-8000-00AA006D2EA4在右面窗口中右击CompatibilityFlags,将它的值设为0。在修改此项时,须要封闭浏览器,修改完后再打开浏览器,便可以加载ADODB.Stream对象了。