- 业务场景
之前公司项目中,应甲方要求在系统中接入扫描仪,经扫描仪扫描生成的文件自动上传到服务器且要求保密性,删除本地文件。
最开始联系的大名软件,但是好像只是提供软件支持,提供开发包sdk;后面选择了爱普生公司的产品,买产品的同时提供sdk开发包。他提供了几种模式下的代码,最开始我打算使用c端java程序,但是实现过程较复杂,最后选择它的js模式,但是只支持ie下运行。那莫法只有用OCX那套了。
这里只是简单记录下当时使用关于ActiveXObject的东西,最后会贴出链接。
还需要注意的是需要调整ie的internet选项。不然调用的时候会报错,这一切是微软的跨浏览器访问客户端文件的安全机制。
- 配置IE


这里需要将你的ip配置到受信任的站点里面,注意添加时如果是https的协议那直接添加,如果是http协议的那么先将勾勾取消,然后再添加。

这里将安全级别拉到最低,如果不得行,访问继续报错的话,那么自己自定义级别,看到图上有关ActiveX下面的所有禁用改为启用。

再找到图示的其他选项下面,将“通过域访问数据源”启用

好,重启计算机,重启ie。
- 读取本地文件流
var stream =new ActiveXObject("ADODB.Stream");
stream.Type=1;
stream.Open();
stream.Position = 0;
stream.LoadFromFile(fileClientpath+"\\"+scanfilename+"0000.pdf");
stream.Position = 0;
//sendByteStreamToServer(stream,url);
stream.Close();
//fileClientpath:为客户端的绝对路径
//scanfilename:为文件名称
//stream:读取的本地文件流二进制数据
- 删除本地文件
var fso = new ActiveXObject("Scripting.FileSystemObject"),
clientFile = fso.GetFile(fileClientpath+"\\"+scanfilename+"0000.pdf");
if(fso.FileExists(fileClientpath+"\\"+scanfilename+"0000.pdf")){
fso.DeleteFile(fileClientpath+"\\"+scanfilename+"0000.pdf")
}
//判断是否删除成功
//var isDeleteFile = fso.GetFile(fileClientpath+"\\"+scanfilename+"0000.pdf");
if(!fso.FileExists(fileClientpath+"\\"+scanfilename+"0000.pdf")){
//$.showTips("删除本地文件成功")
}
- 删除指定文件下所有文件
var fileClientpath = "e:\\scantest";
var fso = new ActiveXObject("Scripting.FileSystemObject")
if(fso.FolderExists(fileClientpath)){
try{
//删除除文件夹以外的所有文件
fso.DeleteFile(fileClientpath+"\\*");
//删除所有文件夹
fso.DeleteFolder(fileClientpath+"\\*");
}catch(e){
alert("*.*" + e.message);
}
}else{
fso.CreateFolder(fileClientpath)
}
关于文件的其他操作,这次没在项目中使用,其实主要是为了配合硬件商提供的接口,选择使用了ie。其实在H5中提供了有关文件的操作,但是我还没有切了解过。
本文介绍如何在Internet Explorer中利用ActiveX技术,实现扫描仪文件的读取与上传,包括调整IE安全设置、使用Adodb.Stream读取本地文件流及删除文件等关键步骤。
279





