zoukankan      html  css  js  c++  java
  • javascript和.net 如何获取文件上传对话框中的全路径名

    这个几天在做一个邮件发送的功能,考虑到把文件上传到服务器,慢慢的会有很多的文件,所以不用.net 的SaveAs功能,而用文件流的形式。

    要用文件流,就要获取客户端上传文件的绝对路径,问题是在各个浏览器下由于安全设置的原因,ie7/8/ff/gg中,上传的文件不会显示出全路径,gg和ff只会显示文件名称,ie8会显示C:\\fakepath\test.txt"。这就是因为浏览器的安全设置。

    解决这个方法只看到有两种方法:

    1,浏览器设置:

      打开ie浏览器-->internet 选项-->安全-->自定义级别-->其他-->将"将文件上载到服务器时显示文件目录路径"启用
      确定后重新运行即可

    2,.net后台代码也不可避免的也有这样的情况,ie6会显示全路径,而ie8/ie7显示:C:\\fakepath\test.txt    ff/gg/只显示文件名。这是浏览器的安全设置,为的是服务器不要知道客户端的路径。

    3,js获取全路径:

      网上找到的一些方法,目前本人还没有测试

      地址:http://blog.csdn.net/komodo_d/article/details/4802816

      原文如下:

    最近在写个小网站,用到了 fileupload 控件来上传文件。因为程序的某些需要,要获取上传文件的本地路径,在 CS 代码中使用的是 fileupload1.PostedFile.FileName ,结果发现得出来的只是文件名,不包含路径,记得以前确实是用这样的方法取得过路径的。

          于是上网搜索了下,原来是因为高版本的浏览器设定为了安全起见,已经不会显示文件路径。只有想办法用JS 来获取路径了,测试了一下后发现。单独只是使用 document.getElementById("fileupload1").value ,在 IE6里可以获取全路径,在 IE7,IE8 及火狐里都是只能获得文件名。

          后来在网上找到了解决办法, IE7,IE8 可以用如下代码获取文件路径

    程序代码 程序代码

         // 判断浏览器类型

        var isIE = (document.all) ? true : false;

        var isIE7 = isIE && (navigator.userAgent.indexOf('MSIE 7.0') != -1);

        var isIE8 = isIE && (navigator.userAgent.indexOf('MSIE 8.0') != -1);

        var file=document.getElementById("fileupload1");

        if(isIE7 || isIE8)

        {

            file.select();

            var path=document.selection.createRange().text;

            document.selection.empty();

        }

            但是在火狐下还是没办法获取文件路径,看到网上有人说用 getAsDataURL() 方法可以获取路径。我测试了一下,用这个方法确实是可以获得路径,但是些路径是被加密过的。于是继续寻找其他方法。。。

          火狐下获取上传文件路径的方法,需要先修改设置。在地址栏输入 about:config ,然后修改signed.applets.codebase_principal_support 的键值,将值修改为 true 。然后再使用如下代码,就可以获得文件路径。

       

    程序代码 程序代码

    try {

            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

        }

        catch (e) {

            alert(' 请更改浏览器设置 ');

            return;

        }

         var fname = document.getElementById("fileupload1").value;

        var file = Components.classes["@mozilla.org/file/local;1"]

            .createInstance(Components.interfaces.nsILocalFile);

        try {

            // Back slashes for windows

            file.initWithPath( fname.replace(////g, "////") );

        }

        catch(e) {

            if (e.result!=Components.results.NS_ERROR_FILE_UNRECOGNIZED_PATH) throw e;

            alert(' 无法加载文件 ');

            return;

        }

         alert(file.path);  // 取得文件路径

           运行以上代码时,浏览器会弹出警告,选择”是“之后,即可获得路径。

     

    4,可能也有别的办法。

      

  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/sheseido/p/2260869.html
Copyright © 2011-2022 走看看