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,可能也有别的办法。

 

  

posted @   老皮肉  阅读(1841)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2010-11-23 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL S
点击右上角即可分享
微信分享提示