2010-10-09 19 views
3

獲取絕對本地路徑我環顧四周,我看到最新的提法是從2008年,說明該標準FileReference瀏覽器不支持檢索用戶的文件的絕對本地路徑,除非它是一個AIR應用程序,的確沒有什麼的文件建議,否則。這背後的原因顯然是一些誤導性的安全擔憂......讓任何Flash應用程序知道你的目錄結構並不是一個好主意,但是如果用戶真正授予你的應用程序一個文件,我認爲它不會使安全失效模型來知道文件的絕對路徑。Flex中

我想知道如果事情的狀態已經改變了所有的Flex 4,並有一個獲取任何東西的本地文件名的方法。我需要它,因爲我正在製作一個應用程序,當分佈式應用程序在99%的情況下在本地運行時,所以做一個完整的文件上傳只是爲了將其保存在本地機器上的其他地方似乎很愚蠢。 (另外,標準文件上傳方法不支持SOAP,這正是我用於所有其他服務的東西......)我總是可以將用戶類型放在本地路徑名中,但這似乎很愚蠢。

+1

現在我很好奇爲什麼有人會讓我失望。除非真正相信所有Intranet應用程序都應導出到AIR,否則這是合法的安全決策。我會承認,例如圖片預覽的觀點並不適用,因爲您可以在沒有路徑的情況下獲取數據,除非您還想要表示與用戶文件系統類似的圖像樹。 – Kevin 2010-10-09 06:12:10

+0

我也不明白downvotes,但既然你有1代表,他們是那些失去了聲譽。 Maaaan ..很多觸發今天在線的人:) – Marko 2010-10-09 07:05:28

+0

如果有人要!「聰明」瞭解他們剛剛投下來的問題......對他們感到羞恥! – 2010-10-09 08:12:20

回答

3

由於安全原因,在Flash(而非AIR)中,您不允許看到fileReference文件的完整路徑。

0

這取決於你想要達到的目標 - 這並不完全清楚你想要做什麼。

「做一個完整的文件上傳只是將它保存在其他地方對本地機器似乎傻」

自Flash Player 10可以直接保存到本地文件系統,而無需通過遠程服務器去。您只需調用FileReference.download()函數來響應用戶的鼠標點擊或按鍵(例如按保存按鈕)。

的FileReference文檔: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#download%28%29

否則,沒有,你是不是能夠得到完整的文件路徑,因爲它可以是一個安全風險 - 即使他們選擇該文件本身。

例如,如果我選擇在Windows機器,我真的不希望一些隨機的Web應用程序知道自己的用戶名的桌面上的文件:

「C:\ Documents和Settings \ [用戶名] \ Desktop \ myAwesomeFile.txt「

並從中你可以猜測我正在運行的Windows版本。

如果您需要與用戶的桌面進行更好的交互,那麼您應該使用AIR--這就是存在的原因。

+0

如何加載用戶選擇的視頻文件?涉及加載視頻文件的任何Flash API是否接受「FileReference」作爲源參數?哦,不,他們不這樣做,所以我們需要完整的路徑來做任何有用的本地文件,除非你能直接處理加載的字節。 – Triynko 2012-11-20 01:39:29

+0

「我如何加載用戶選擇的視頻文件?」您可以部署一個可以執行此操作的基於AIR的應用程序;它不是基於Web的Flash應用程序的工作。這與基於Web的JavaScript內容具有相同類型的安全沙盒(出於相同的原因)。選擇性地保護和信任互聯網上的內容非常困難(Java applet就是這方面的一個主要例子),這就是爲什麼AIR有不同的部署和安全模型的原因。 – 2012-11-20 02:10:16

+0

實際上,我可以通過NetStream.appendBytes方法直接從使用FileReference獲取的字節中加載視頻。值得注意的是它只支持FLV標題,所以我運氣不好,因爲我的所有文件都是較新的F4V格式。我不需要單獨的運行時(AIR)來加載本地文件。 Flash支持它,因爲SWF可以訪問本地文件或網絡。問題在於ActionScript API需要完整路徑,並且無法接受FileReference。顯然缺乏對F4V的支持也是失敗的。視頻類可以使用loadBytes或load(FileReference)方法。 – Triynko 2012-11-20 02:21:39