Jquery基于ActiveX的批量上传
2010-01-08 00:00:00 来源:WEB开发网改造好之后已经可以实现这样的功能:传入一个盘符号,会列出所有该盘符的所有文件夹,继续点击会继续列出相应文件夹的子文件夹(和windows文件效果类似)。
接下来要实现上传。没有控件就不能直接接受file,又不能接收路径查找文件,那么只能把文件整个传到服务器端。思路是将文件转成 base64流,再通过ajax传到服务器端(这里要用到另一个插件MSXML2.DOMDocument),然后服务器端 Request.InputStream接收,然后用XML处理这个流,之后base64解码,然后继续你的上传流程就可以了。
//选择完成后确定按钮事件
function selectconfirm()
{
var localpath = $("#inputpath").val();
var leaving = $("#LblYue").text();
var tj = $("#chkIsTj").attr("checked") == true ? "1" : "0";
$("#input2").show();
$("#hidinput").val("1");
upload(localpath, leaving, tj);
}
//上传和文件夹操作
function upload(localpath, leaving, tj)
{
var fso, f, fc, a;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(localpath);
if (!fso.FolderExists(localpath + "\\Success"))
{
fso.CreateFolder(localpath + "\\Success");
}
if (!fso.FolderExists(localpath + "\\Fail"))
{
fso.CreateFolder(localpath + "\\Fail");
}
ff = new Enumerator(f.files);
for (; !ff.atEnd(); ff.moveNext())//枚举所有文件
{
s = ff.item(); //取文件对象
alert(s);
uptowebmethod(s.Path, leaving, tj, f.Path, localpath);
}
}
//文件->流->XML->ajax传入后台
function uptowebmethod(path, leave, istj, fpath, localpath)
{
var ado_stream = new ActiveXObject("ADODB.Stream");
var xml_dom = createXMLDOM();
xml_dom.loadXML('<?xml version="1.0" ?><root/>');
xml_dom.documentElement.setAttribute("xmlns:dt", "urn:schemas-microsoft-com:datatypes");
var l_node1 = xml_dom.createElement("photo");
l_node1.dataType = "bin.base64";
ado_stream.Type = 1; // 1=adTypeBinary
ado_stream.Open();
ado_stream.LoadFromFile(path);
l_node1.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
ado_stream.Close();
xml_dom.documentElement.appendChild(l_node1);
var pnode = xml_dom.createElement("path");
xml_dom.documentElement.appendChild(pnode);
pnode.text = path;
var lnode = xml_dom.createElement("leave");
xml_dom.documentElement.appendChild(lnode);
lnode.text = leave;
var tjnode = xml_dom.createElement("istj");
xml_dom.documentElement.appendChild(tjnode);
tjnode.text = istj;
var fnode = xml_dom.createElement("fpath");
xml_dom.documentElement.appendChild(fnode);
fnode.text = fpath;
$.ajax({
type: "POST", //访问WebService使用Post方式请求
//contentType: "application/json", //WebService 会返回Json类型
url: "AjaxForm1.aspx", //调用WebService的地址和方法名称组合 ---- WsURL/方法名
processData: false,
data: xml_dom, //这里是要传递的参数,格式为 data: "{paraName:paraValue}",下面将会看到
//dataType: 'json',
success: function(result)
{ //回调函数,result,返回值
if (result == '0')
{
s.move(localpath + "\\Fail\\" + s.name);
}
else if (data == '1')
{
s.move(localpath + "\\Success\\" + s.name);
}
else
{
alert(result);
}
}
})
}
//创建XMLDOM
function createXMLDOM()
{
var arr = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument", "Microsoft.XmlDom"];
for (var i = 0; i < arr.length; i++)
{
try
{
var xmlDom = new ActiveXObject(arr[i]);
return xmlDom;
}
catch (oError)
{
alert("error");
}
}
throw new Error("MSXML is not install on your system.");
}
更多精彩
赞助商链接