2012-08-23 36 views
2

HTML使用表格將數據發送到Web服務器。這些數據可以包含在url參數中或嵌入在HTML Request體中。但對於一個文件,我不知道它是如何工作的。我想知道這一點,因爲我發現上傳Web和桌面應用程序文件的一些區別。HTML文件上傳如何工作?

桌面應用程序通常會提供一個文本框,以允許用戶輸入文件的區域設置路徑。但對於Web應用程序,文本框通常是隻讀的。當按下按鈕選擇文件時,它將顯示文件路徑。這只是桌面和網頁之間的設計問題嗎?

回答

3

問題有點不清楚,但有關Web應用程序(或HTML表單)的一個重要方面是它們被沙盒化,無法直接訪問本地文件。所以文件上傳選擇器不允許直接輸入文件名(可能是腳本),但只能通過操作系統(或瀏覽器)提供的文件選擇UI(應用程序或頁面不能混淆)。

一旦用戶選擇了文件,頁面就可以訪問它,但它不能自己(或暗中)進行選擇。

最近的趨勢是以相同的方式鎖定桌面應用程序。例如,請參閱Apple的沙盒限制,也不允許應用程序在沒有用戶干預的情況下打開隨機文件。

+1

謝謝@Thilo。這對我來說聽起來很合理.JavaScript在HTML5之前不能訪問本地文件,但輸入文件名只是一個'String'。爲什麼它不能被JavaScript操縱?我也很困惑,「一旦用戶選擇了文件,頁面就可以訪問它」。這是什麼意思?選擇後頁面是否可以操縱文件? – wqfeng

+2

JavaScript *可以*訪問本地文件(至少從HTML5開始),但只有用戶明確選擇的文件。我想說的是,應用程序無法直接訪問它想要的磁盤上的任何文件(而對於其他表單字段,它可以在將它發送到服務器之前以任何方式覆蓋用戶的輸入)。 – Thilo

0

這只是桌面和網頁之間的設計問題嗎?

文件上傳表單的實現,無論是桌面還是網頁,對於最終結果來說都很不重要。桌面應用程序和網絡控件都可以使用路徑字符串或完整的文件導航器,但桌面應用程序在實現中可能會有所不同。唯一的區別是目的地:桌面應用傾向於解析內存中的文件並以某種方式呈現它,而Web應用幾乎總是將其上傳到服務器(儘管這可能會發生變化:請參閱HTML5 file API),然後進一步操作它。

+0

我不認爲一個Web應用程序可以使用任意的路徑字符串。所有文件選擇必須由用戶「審查」。 – Thilo

+0

@Thilo Lynx讓我做得很好。 –

+0

Lynx讓*你*輸入文件路徑。它不會讓頁面上的Javascript(如果它支持),更改該路徑或提供它自己的。 – Thilo