zoukankan      html  css  js  c++  java
  • IE8下服务端获取客户端文件的路径为C:/fakePath问题的解决方案

    上一篇文章上提到,IE8下服务端获取客户端文件的路径时,会变成C:/fakePath问题,于是乎通过文件路径去获得文件大小就失败了。

    上网搜了一下,主要原因是IE8因为安全考虑,在上传文件时屏蔽了真实路径,用C:/fakePath代替。

    一、可以通过设置浏览器安全选项得到真实路径:

      Internet选项 -> 安全 -> 自定义级别 -> 将本地文件上载至服务器时包含本地目录路径 -> 选“启动” -> 确定  

    但是,作为开发者,我们不能指望客户去这么做,所以我们必须通过代码解决这个问题。(参考文章:http://yunzhu.iteye.com/blog/1116893

    二、通过selection.createRange().text方式获取路径

    代码如下:

    //获取文件路径,解决在IE8下由于安全问题,服务端获取客户端文件的路径为C:/fakePath问题
            function getPath(obj){  //参数obj为input file对象
                if(obj){
                    if (window.navigator.userAgent.indexOf("MSIE")>=1){
                        obj.select();
                        return document.selection.createRange().text;
                    }else if(window.navigator.userAgent.indexOf("Firefox")>=1){
                        if(obj.files){
                            return obj.files.item(0).getAsDataURL();
                        }
                        return obj.value;
                    }
                    return obj.value;
                }  
            }

    以上代码在IE678下可以正常访问,但在IE9下,document.selection.createRange()拒绝访问,可能是IE的安全性有所提高导致。

    经过谷歌搜索之后,网上提供的解决方案是:在IE9下,如果file控件获得焦点,则document.selection.createRange()拒绝访问,因此,只需要在obj.select()后面加一句obj.blur()即可。

  • 相关阅读:
    从TCP三次握手说起——浅析TCP协议中的疑难杂症
    动态绑定是如何实现的?
    C++对象的内存模型
    C/C++关键字
    libevent库介绍--事件和数据缓冲
    libevent编程疑难解答
    大型工程多个目录下的Makefile写法
    C++中的RAII机制
    C++中的智能指针
    二叉树的非递归遍历
  • 原文地址:https://www.cnblogs.com/ryanchancrj/p/3478859.html
Copyright © 2011-2022 走看看