2013-09-26 38 views
3

我正在研究一個Web應用程序,它需要有一個鏈接從文件服務器打開文檔文件夾。該文件夾可以在新的瀏覽器選項卡或新窗口中打開,也可以使用計算機的默認文件瀏覽器程序(即Windows資源管理器)打開。這個JavaScript應該做的伎倆:如何通過Firefox和Chrome網站上的鏈接打開文件夾?

window.open('file://///fileserver.companyname/public/Documents/','_blank);

和這個網站也應該工作:

<a href="file://///fileserver.companyname/public/Documents/">Open Documents</a>

但這些都只能工作在Internet Explorer中,和我們的用戶經常使用Firefox和Chrome。顯然Firefox和Chrome的默認安全設置不允許您在從「http://」網站調用請求時打開「file://」。

我已經看到這個頁面的幾個引用:Links to local pages do not work它描述了爲什麼你不能使用Firefox從網頁打開文件,並提供了一些解決方法。不幸的是,它只提供兩種選擇:在每個瀏覽器實例上安裝一個插件,或爲每個瀏覽器實例創建一個用戶首選項文件。這些選項都不可接受,因爲我們有太多的用戶。我工作的公司不願意將任何東西應用於需要訪問此鏈接的每臺機器。除此之外,無論如何,我都嘗試過插件和首選項文件,唯一能爲我工作的是IE Tab插件。我認爲LocalLinks不起作用的原因是因爲我試圖打開一個文件夾,而不是一個文件。

這個stackoverflow問題描述了Chrome的類似選項:Can Google Chrome open local links?但是,LocalLinks插件不適用於我,無論如何也不接受插件。

我還發現了一個網站,建議使用命令行參數頂部打開的文件在Chrome(http://www.askyb.com/chrome/open-local-file-in-google-chrome/)和一個展示瞭如何運用自動參數(https://askubuntu.com/questions/160245/making-google-chrome-option-allow-file-access-from-files-permanent),但如果我正確地讀它,它仍然涉及應用更改到每臺訪問我們網站的電腦。

任何方式兩個Firefox和Chrome打開一個文件夾完全編程即我的web應用程序C#或Javascript代碼中沒有插件安裝或添加的參數文件到個人電腦?我無法改變這些業務需求。我希望在C#中使用控制器動作打開文件夾(因爲我想在打開文件夾之前創建文件夾,如果它尚不存在的話)。我希望在C#中使用控制器動作打開文件夾(因爲如果它尚不存在, ,但客戶端的javascript或html是可以接受的。對於Internet Explorer,我可以在C#代碼中創建該JavaScript,方法是將其封裝在MVC C#控制器中內置的JavaScript(...)函數中。在Firefox和Chrome中測試IE Tabs時,我必須將其定義爲href鏈接,而不是打開窗口的函數,否則IE Tabs將無法將其識別爲鏈接。但這些都不是我們業務需求的可接受解決方案。

+0

我懷疑,如果你所描述的是可能的話,那將代表一個安全漏洞。 –

回答

0

這裏是簡單的html代碼:

<input type="file" webkitdirectory>

但這段代碼的問題是,它僅適用於谷歌!

2

在我想出一個可行的解決方案之前,請求已被刪除,但如果其他人仍然在解決這個問題,我將描述不需要任何工作站定製的解決方法。

他們在技術上不需要使用內置文件資源管理器來打開文件夾。相反,在不中斷任何瀏覽器安全規則的情況下顯示業務所需信息的創造性方法是在不打開文件資源管理器的情況下迭代文件,然後在瀏覽器窗口中顯示文件夾/文件列表。

使用Directory.EnumerateDirectories(filepath)Directory.EnumerateFiles(filepath)您可以獲取要顯示的文件夾和文件的列表。當用戶點擊其中一個文件夾時,再次調用這些方法來獲取下一級的文件夾和文件名。當用戶點擊一個文件時,下載/打開它。這些方法將文件夾和文件名稱作爲字符串列表返回,因此您只需在瀏覽器中使用自定義圖標來呈現列表。 (這些方法來自C#的System.IO庫。)