只用路径上传文件,不用手动选择文件上传

关键字:

浏览器禁止访问本地文件,浏览器安全,同源策略,跨域访问

用路径上传文件到服务器,不用手动浏览选择上传

activex,activexobject


问题缘起一个需求:

用户有文件a,a中记录了一些路径,用户要求在上传a的同时,解析a,并将a中所有路径指向的其本地文件全部上传到远程服务器

平时传文件时不知大家有没有注意,只要是传本地文件到服务器,必须要让用户手动浏览再选择,如果只有个文件路径,是不能上传的,这涉及到浏览器安全策略

浏览器在一般情况下严禁访问本地文件,如果能随便访问的话,那上个网分分钟自己电脑东西就被人偷走了

因此这个需求在刚接到时感觉是不可能的,最近似的方法是用一个批量上传文件插件,但是还是要手动选择

在网上搜前端解决方法,不管是js还是flash,都需要用户的手选那么一下

在网上学习了一下,很多人都发帖问解决方法,发现了有解决这个问题的方法,但是应用不多,资料比较少,在这里整理为以下,这是我能在网上找到的所有解决方法



解决思路

1、利用ie的activex控件,读取本地文件,将文件内容上传到服务器,服务器新建文件

2、还是利用activex控件,运行本地程序,本地程序直接将文件上传

3、利用自定义协议Asynchronous Pluggable Protocols,运行本地程序


activex:只能ie

是ie的插件,只支持ie,且在运行前先调低浏览器安全等级,允许activex运行,在运行时还要手动确认

在网上搜索,ActiveXObject 对象 (JavaScript),有windows官方文档https://msdn.microsoft.com/library/7sw4ddf8(v=vs.94).aspx

里面简介了这个控件的用法,主要是创建activexobject对象,可以操作本地文件、文件夹、磁盘等,可以读写移动删除。

但是从他给出的类型来看,只有txt、word、excel、shell四种类型可以操作,没有图片

因此如果是自带类型,可以读内容,然后再远程创建文件写入

如果不是自带类型,如图片,我想直接以txt类型读,传输字节流,在远程收到后再转换成图片

在网上搜了一下,还没有用这个方法做成功的,唯一一个尝试的:http://www.iteye.com/problems/83344


关于shell调用本地程序:

activexobject创建的WScript.Shell对象,这个对象的run和exec函数,相当于cmd命令行,可以执行一些命令,我自己尝试了执行exe程序和java -jar命令都成功,

可以用这个调用本地程序,然后在本地文件中写一些操作。

在网上看,似乎这个对象是vbscript的,不是很懂

具体调用方法,网上查WScript.Shell关键字即可


另外,activex对象在操作excel等类型似乎还有一些实用的函数,类似第几个单元格,第几行数据,但是我在网上查不到一个完整的文档

在http://www.netpc.com.cn/doc/jscript/html/jsfctgetobject.htm


还有个函数GetObject,,这个得到对象后甚至能查看图层?


参考:

http://www.jsann.com/post/activexobject_in_javascript.html

http://blog.csdn.net/chen_zw/article/details/9336375

http://blog.csdn.net/superbirds/article/details/6762748

http://www.jb51.net/article/25233.htm



自定义协议Asynchronous Pluggable Protocols

这个东西在网上的资料也是很少

有一个windows官方文档是https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx,标题Registering an Application to a URI Scheme


这个自定义协议即是自定义一个url头,在注册表中注册后,点击这个连接会自动运行绑定的程序,网页上开启qq、迅雷就是这个原理

具体的操作方法,以及如何编写reg注册表文件,

参考:

http://blog.csdn.net/chen_zw/article/details/38458855

http://www.cnblogs.com/phinecos/archive/2009/03/06/1404951.html

http://www.cnblogs.com/liushaofeng89/p/5432770.html

http://blog.csdn.net/tbj621/article/details/38928775


一些其他:

听说有个东西ADODB.Stream,在网上查了半天没看懂,好像也有类似功能

浏览器不仅打开客户端本地程序,还控制程序,参考:http://blog.csdn.net/pony12/article/details/16883293


后记:

本来已经开始着手实现了,后来又沟通了一下,发现是理解错了,对方说文件和文件里面路径指向的文件是都放在一个压缩包里的,没有我想的这么复杂

但是也不白浪费这时间,毕竟看到了这些技能。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值