原文:http://www.blogjava.net/emu/archive/2011/08/28/357431.html
在编写某个hta的用户环境分析工具的时候,经常发现用户被一些莫名其妙的代理服务器所劫持以后,一个正常的文本请求却下载到了一个图片。这种log看多了以后sidney就开始投诉了,想搜集到用户那里收到的到底是个什么图片。
这个图片用户那里虽然可以看,但是要生成到log里面就要另外保存一个文件,如果要上传的话还要开发相应的图片上传功能,这就麻烦了。
当然还可以用eml或者mht的形式吧图片打包在log里面,这样图片就会以base64形式编码进去嵌在log的文本里面了。但是hta记得似乎控制save命令的时候不能制定mht格式(没试过),eml要依赖客户端有邮件客户端,还要能通过js操控,更麻烦。
因此最简单的看起来就是zishun写的《利用HTML5对文件进行base64转换》方案了,只要把图片转成DATAURI,就可以很容易的把图片信息嵌入到页面里面并在现代浏览器里面展现。这个方案唯一的问题是,仅限非IE。
还好IE其实也有类似的功能,并且效率更高,唯一的问题是要依赖activex,不过这再hta里面就不算问题了。
IE下的图片文件(图片)base64编码代码是这样的:
<SCRIPT LANGUAGE="JavaScript"> <!-- var x= new ActiveXObject("Msxml2.XMLHTTP.6.0"); x.onreadystatechange=function(){ if(x.readyState<4)return; var xml_dom = new ActiveXObject("MSXML2.DOMDocument"); var tmpNode = xml_dom.createElement("tmpNode"); tmpNode.dataType = "bin.base64"; tmpNode.nodeTypedValue = x.responseBody; base64string=tmpNode.text.replace(/\n/g,""); document.write("<img src=\"data:image/bmp;base64,"+base64string+"\">") } x.open("get","http://www.blogjava.net/images/blogjava_net/emu/1359/o_emu120.jpg",true); x.send(""); //--> </SCRIPT>