常用的实现选择多个文件的对话框的方法有两种:
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文件三,所以无论调试还是将字符串打出来,都只能看到文件路径,坑爹啊!!!!!
没有评论:
发表评论