javascript和.net 如何擷取檔案上傳對話方塊中的全路徑名

來源:互聯網
上載者:User

這個幾天在做一個郵件發送的功能,考慮到把檔案上傳到伺服器,慢慢的會有很多的檔案,所以不用.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 及Firefox裡都是只能獲得檔案名稱。

      後來在網上找到瞭解決辦法, 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();

    }

        但是在Firefox下還是沒辦法擷取檔案路徑,看到網上有人說用 getAsDataURL() 方法可以擷取路徑。我測試了一下,用這個方法確實是可以獲得路徑,但是些路徑是被加密過的。於是繼續尋找其他方法。。。

      Firefox下擷取上傳檔案路徑的方法,需要先修改設定。在地址欄輸入 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,可能也有別的辦法。

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.