2011年10月27日星期四

在网页中实现选择多个文件的对话框

IE(IE9以下)不支持File API,所以很难实现能够选择多个文件的对话框。
常用的实现选择多个文件的对话框的方法有两种:
1. 调用Flash插件选择文件,缺点是能得到文件名,得不到文件路径。
2. 调用ActiveX插件选择文件,缺点是需要设置为安全站点。
公司的网站已经设置为安全站点了,而我又需要知道文件的路径来生成缩略图,所以选择了第二种方法。
代码如下是:
    // 0x200    OFN_ALLOWMULTISELECT
    // 0x80000  OFN_EXPLORER    
    // 0x800    OFN_PATHMUSTEXIST
    // 0x4      OFN_HIDEREADONLY
    // 0x200000 OFN_LONGNAMES  
    // 0x1000   OFN_FILEMUSTEXIST
    var flags = 0x200|0x800|0x4|0x200000|0x1000|0x80000;   

    var dialog = new ActiveXObject('MSComDlg.CommonDialog');
    dialog.Filter = 'All files (*.*)|*.*| ';
    dialog.MaxFileSize = 260;
    dialog.Flags=flags; 
    dialog.ShowOpen();
    console.log(dialog.FileName.length, dialog.FileName.split(/\0/).length);

var flags = 0x200|0x800|0x4|0x200000|0x1000|0x80000;

dialog.FileName.split(/\0/)

很重要,这两句话浪费了我一天的时间。

0x200 保证可以选择多个文件

0x80000 保证可以让对话框看没关系,没有它,对话框为windows95以下的那些版本的文件选择对话框,很难看

dialog.FileName.split(/\0/)是最折腾我的,好不容易多选了,也好看了,可以返回的FileName是个字符串,将这个字符串打出来后显示的是文件的路径,不包括文件!!!最后我发现dialog.FileName.length远远大于,文件路径的长度,然后在网上查到有人用dialog.FileName.split(/\0/)

dialog.FileName的格式为文件路径\0文件一\0文件二\0文件三,所以无论调试还是将字符串打出来,都只能看到文件路径,坑爹啊!!!!!

没有评论:

发表评论