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()即可。

  • 相关阅读:
    Delphi从Internet下载文件
    datasnap 上传/下载大文件(本Demo以图传片文件为例)
    delphi 理解ParamStr
    delphi2010多线程编程教程
    QQ2008自动聊天精灵delphi源码
    Delphi使用Indy、ICS组件读取网页
    UniDac 使用日记(转)
    delphi xe5 安卓 配置sqlite
    Netty内存管理器ByteBufAllocator及内存分配
    初识内存分配ByteBuf
  • 原文地址:https://www.cnblogs.com/ryanchancrj/p/3478859.html
Copyright © 2011-2022 走看看