當前位置:首頁 » 文件管理 » aspnet上傳組件

aspnet上傳組件

發布時間: 2024-02-24 13:48:50

『壹』 ASP.net配置環境

在windows 2003 Server下如何安裝IIS6.0,在IIS6.0的配合下我們如何來安裝和部署ASP.net環境,以及它們之間關系,下面的內容將給大家一個解答。

1、使用"配置您的伺服器向導"安裝 IIS6.0

1)從"開始"菜單,單擊"管理您的伺服器"。
2)在"管理您的伺服器角色"下,單擊"添加或刪除角色"。
3)閱讀"配置您的伺服器向導"中的預備步驟,然後單擊"下一步"。
4)在"伺服器角色"下,單擊"應用程序伺服器 (IIS,ASP.NET)",然後單擊"下一步"。
5)閱讀概要信息,然後單擊"下一步"。
6)單擊"完成"。
2、使用控制面板安裝 IIS、添加組件或刪除組件

1)從"開始"菜單,單擊"控制面板"。
2)雙擊"添加或刪除程序"。
3)單擊"添加/刪除 Windows 組件"。
4)在"組件"列表框中,單擊"應用程序伺服器"。
5)單擊"詳細信息"。
6)單擊"Internet 信息服務管理器"。
7)單擊"詳細信息"以查看 IIS 可選組件的列表。
8)選擇要安裝的所有可選組件。
9)單擊"確定",直到返回到"Windows 組件向導"。
10)單擊"下一步",然後完成"Windows 組件向導"。

三、在Windows 2003 Server 安裝 ASP.NET

Windows Server 2003 家族利用 ASP.NET 和 IIS 集成改善了開發人員體驗。ASP.NET 識別大多數 ASP 代碼,同時為創建可作為 Microsoft .NET Framework 的一部分工作的企業級 Web 應用程序提供更多的功能。使用ASP.NET 允許我們充分利用公共語言運行庫的功能,如類型安全、繼承、語言互操作性和版本控制。IIS 6.0 還為最新的 Web 標准,包括 XML、簡單對象訪問協議 (SOAP) 和 Internet 協議版本 6.0 (IPv6.0),提供支持。

ASP.NET 是一個統一的 Web 開發平台,它提供開發人員創建企業級 Web 應用程序所需的服務。盡管 ASP.NET 的語法基本上與 ASP 兼容,但是它還提供了一個新的編程模型和基礎結構以提高應用程序的安全性、縮放性和穩定性。通過逐漸向現有的 ASP 應用程序增加 ASP.NET 功能,我們可以自由地使其增大。ASP.NET 是一個編譯的、基於 .NET 的環境;我們可以用任何 .NET 兼容的語言(包括 Microsoft Visual Basic.NET,Microsoft Visual C# 和 Microsoft JScript .NET)創作應用程序。另外,整個 Microsoft .NET Framework 可用於任何 ASP.NET 應用程序。開發人員可以很容易地從這些技術受益,這些技術包括管理的公共語言運行庫環境、類型安全、繼承等。

ASP.NET的優點如下:

1)可管理性: ASP.NET 使用基於文本的、分級的配置系統,簡化了將設置應用於伺服器環境和 Web 應用程序的工作。因為配置信息是存儲為純文本的,因此可以在沒有本地管理工具的幫助下應用新的設置。配置文件的任何變化都可以自動檢測到並應用於應用程序。
2)安全: ASP.NET 為 Web 應用程序提供了默認的授權和身份驗證方案。開發人員可以根據應用程序的需要很容易地添加、刪除或替換這些方案。
3)易於部署: 通過簡單地將必要的文件復制到伺服器上,ASP.NET 應用程序即可以部署到該伺服器上。不需要重新啟動伺服器,甚至在部署或替換運行的已編譯代碼時也不需要重新啟動。
4)增強的性能: ASP.NET 是運行在伺服器上的已編譯代碼。與傳統的 Active Server Pages (ASP) 不同,ASP.NET 能利用早期綁定、實時 (JIT) 編譯、本機優化和全新的緩存服務來提高性能。
5)靈活的輸出緩存: 根據應用程序的需要,ASP.NET 可以緩存頁數據、頁的一部分或整個頁。緩存的項目可以依賴於緩存中的文件或其他項目,或者可以根據過期策略進行刷新。
6)國際化: ASP.NET 在內部使用 Unicode 以表示請求和響應數據。可以為每台計算機、每個目錄和每頁配置國際化設置。
7)移動設備支持: ASP.NET 支持任何設備上的任何瀏覽器。開發人員使用與用於傳統的桌面瀏覽器相同的編程技術來處理新的移動設備。
8)擴展性和可用性: ASP.NET 被設計成可擴展的、具有特別專有的功能來提高群集的、多處理器環境的性能。此外,Internet 信息服務 (IIS) 和 ASP.NET 運行時密切監視和管理進程,以便在一個進程出現異常時,可在該位置創建新的進程使應用程序繼續處理請求。
9)跟蹤和調試: ASP.NET 提供了跟蹤服務,該服務可在應用程序級別和頁面級別調試過程中啟用。可以選擇查看頁面的信息,或者使用應用程序級別的跟蹤查看工具查看信息。在開發和應用程序處於生產狀態時,ASP.NET 支持使用 .NET Framework 調試工具進行本地和遠程調試。當應用程序處於生產狀態時,跟蹤語句能夠留在產品代碼中而不會影響性能。
10)與 .NET Framework 集成: 因為 ASP.NET 是 .NET Framework 的一部分,整個平台的功能和靈活性對 Web 應用程序都是可用的。也可從 Web 上流暢地訪問 .NET 類庫以及消息和數據訪問解決方案。ASP.NET 是獨立於語言之外的,所以開發人員能選擇最適於應用程序的語言。另外,公共語言運行庫的互用性還保存了基於 COM 開發的現有投資。
11)與現有 ASP 應用程序的兼容性: ASP 和 ASP.NET 可並行運行在 IIS Web 伺服器上而互不沖突;不會發生因安裝 ASP.NET 而導致現有 ASP 應用程序崩潰的可能。ASP.NET 僅處理具有 .aspx 文件擴展名的文件。具有 .asp 文件擴展名的文件繼續由 ASP 引擎來處理。然而,應該注意的是會話狀態和應用程序狀態並不在 ASP 和 ASP.NET 頁面之間共享。

安裝 ASP.NET

在 Windows Server 2003 家族、Windows 2000 (Professional、Server 和 Advanced Server)以及 Windows XP Professional 上的客戶端和伺服器應用程序都支持 ASP.NET。

運行 Microsoft Windows Server 2003 家族成員的伺服器可以配置為應用程序伺服器,並將 ASP.NET 作為在配置應用程序伺服器角色時可以啟用的選項。要向產品伺服器部署 ASP.NET Web 應用程序,在分發應用程序之前,必須確保在產品伺服器中啟用了 ASP.NET 和 IIS 角色。

1、使用"配置您的伺服器"向導在運行 Windows Server 2003 的伺服器中安裝 ASP.NET

1)從"開始"菜單中,單擊"管理您的伺服器";在"管理您的伺服器"窗口中,單擊"添加或刪除角色"。
2)在"配置您的伺服器向導"中,單擊"下一步",並在"伺服器角色"對話框中,選中"應用程序伺服器 (IIS、ASP.NET)",然後單擊"下一步"。
3)在"應用程序伺服器選項"對話框中,選中"啟用 ASP.NET"復選框,單擊"下一步",然後再單擊"下一步"。
4)如有必要,請將 Windows Server 2003 安裝 CD 插入 CD-ROM 驅動器,然後單擊"下一步"。
5)當安裝完成時,單擊"完成"。

2、在運行 Windows Server 2003 的伺服器中使用"添加或刪除程序"安裝 ASP.NET

1)從"開始"菜單中,指向"控制面板",然後單擊"添加或刪除程序"。
2)在"添加或刪除程序"對話框中,單擊"添加/刪除 Windows 組件"。
3)在"Windows 組件"向導中的"組件"中,選中"應用程序伺服器"復選框,然後單擊"下一步"。
4)當在"Windows 組件"向導中完成對 Windows Server 2003 的配置時,單擊"完成"。

3、在運行 Windows Server 2003 的伺服器中的 IIS 管理器中啟用 ASP.NET

1)從"開始"菜單中,單擊"運行"。
2)在"運行"對話框中的"打開"框中,鍵入 inetmgr,然後單擊"確定"。
3)在 IIS 管理器中,展開本地計算機,然後單擊"Web 服務擴展"。
4)在右側窗格中,右鍵單擊"ASP.NET"然後單擊"允許"。ASP.NET 的狀態變為"允許"。

ASP.NET Web 應用程序的布局

ASP.NET 應用程序被定義為可從 Web 伺服器上的虛擬目錄及其子目錄中調用的所有文件和可執行碼。其中可以包含網頁(.html 文件)、Web 表單頁面(.aspx 文件)、Web 表單用戶控制項(.ascx 文件)、XML Web 服務(.asmx 文件)、HTTP 處理程序、HTTP 模塊和其他文件(如圖像和配置文件)。現在使用的所有與 Microsoft .NET Framework 版本相關的腳本映射也都是 ASP.NET 應用程序的一部分。ASP.NET 應用程序必須位於 IIS 虛擬目錄(也稱為應用程序根目錄)中。ASP.NET 應用程序可包含已編譯的程序集(通常是包含業務邏輯的 DLL 文件)、用於存儲預編譯代碼的已知目錄(目錄名總是 \Bin)、存儲在基於文本的、易讀的 Web.config 文件中的配置設置、頁、伺服器控制項,以及 XML Web 服務。

伺服器中任何不與其他應用程序共享的預編譯代碼必須存儲在應用程序的 \Bin 目錄中。它是應用程序的本地程序集緩存。Web.config 文件在基於 XML 的文本文件中存儲應用程序級的配置文件。這意味著可以使用任意標準的文本編輯器或 XML 分析器來創建它們,而且它們是可讀的。如果不在應用程序根目錄中包含 Web.config 文件,則配置設置由 Machine.config 文件中整個伺服器的配置文件來確定。安裝 .NET Framework 時,會安裝 Machine.config 文件的某個版本。

下圖顯示了 ASP.NET 應用程序文件系統布局的示例。

本圖中的應用程序包括 \Bin 目錄中的兩個 DLL 文件、一個 Default.aspx 頁,一個名為 Menu.ascx 的用戶控制項、一個名為 MyWebService.asmx 的 XML Web 服務以及一個 Global.asax 文件。另外,該應用程序是使用下列三個配置文件配置的:系統根目錄中計算機級別的 Machine.config 文件、C:\Inetpub\Wwwroot 目錄中站點級別的 Web.config 文件和應用程序根目錄中應用程序級別的 Web.config 文件。當站點的 Web.config 文件覆蓋 Machine.config 文件中的設置時,在應用程序根目錄中存儲的配置設置將覆蓋站點的 Web.config 文件和 Machine.config 文件中的設置。

ASP.NET與IIS、ASP 之間的比較

ASP.NET 應用程序與 Internet 信息服務 (IIS) 之間的關系如下:IIS 通過 aspnet_isapi.dll(ASP.NET 的進程模型)對可發布的 ASP.NET 文件的所有請求提供服務。IIS 不會處理伺服器端的代碼;而 ASP.NET 引擎則會處理伺服器端代碼,然後將輸出返回給 IIS(如果可能,或另一個 Web 伺服器)。
ASP.NET 並非僅僅是下一代的ASP,它為創建利用 Internet 的網路應用程序提供了全新的編程模型。ASP.NET與ASP比較的特點如下:

1、改進的性能和可伸縮性

1)編譯後執行:ASP.NET 比傳統 ASP 的運行速度更快,同時保留了 ASP"只需點擊保存"的更新模型。無需顯式的編譯步驟。ASP.NET 自動檢測變化,根據需要動態編譯文件,並且保存編譯結果以便後續的請求再次使用。動態編譯保證了用戶的應用程序總是最新的,並且編譯後執行的操作會使其運行速度更快。對於多數從傳統的 ASP 遷移到 ASP.NET 的應用程序,其處理的頁數增長了 3 至 5 倍。
2)大容量輸出緩存:ASP.NET 輸出緩存極大地改進了應用程序的性能和可伸縮性。當在頁面中啟用輸出緩存時,ASP.NET 就會執行一次該頁並將結果在發送至用戶之前保存在內存中。當其他用戶請求同一頁面時,ASP.NET 使用內存中的緩存結果向用戶提供服務,而不是重新執行該頁面。輸出緩存是可配置的,並且可以用來緩存單個區域或整個頁面。
3)Web 場會話狀態:ASP.NET 會話狀態允許我們在 Web 場中的所有計算機之間共享會話數據。現在,用戶可以通過多個請求訪問 Web 場中不同的伺服器,並且仍然具有完全訪問會話數據的許可權。

2、增強的可靠性

內存泄漏、死鎖和故障保護:ASP.NET 自動檢測錯誤(例如,死鎖和內存泄漏)並進行恢復以確保我們的應用程序始終可用。例如,當檢測到內存泄漏時,ASP.NET 將自動啟動新的 ASP.NET 工作進程副本,並將所有的新請求定向到該進程。當舊進程完成掛起請求的處理後,會經過適當的處置並釋放泄漏的內存。

3、部署簡單

1)"非接觸式"應用程序部署:使用 ASP.NET,我們可以通過將其復制到伺服器來進行整個應用程序的部署。配置設置將存儲在應用程序的 XML 文件中。
2)動態更新運行的應用程序:ASP.NET 允許我們不必重新啟動 Web 伺服器而更新已編譯的組件。與傳統的 COM 組件(這些組件需要在部署更新後手動重新啟動 Web 伺服器)不同,ASP.NET 自動檢測更改並使用新的代碼啟動。
3)遷移路徑簡單:ASP.NET 可以和傳統的 ASP 應用程序一起在 Microsoft Windows 2000、Windows XP、以及 Windows Server 2003 家族成員的 IIS 上運行。我們可以一次遷移一個應用程序,甚至是單獨的頁面。ASP.NET 甚至允許我們繼續使用現有的傳統 COM 商務組件。

4、新的應用程序模型

1)XML Web 服務:XML Web 服務允許應用程序通過 Internet 進行通信和共享數據,而不管操作系統和編程語言如何。ASP.NET 使得公開和調用 XML 網路服務變得簡單。
2)移動 Web 設備支持:ASP.NET 移動控制項允許我們處理超過 80 台使用 ASP.NET 的移動 Web 設備。我們只需一次性寫入應用程序,移動控制項就能自動生成請求設備的頁面。

5、開發人員的效率

1)簡單的編程模型:具有伺服器控制項(這些控制項允許我們使用比傳統 ASP 更少的代碼來構建效果極佳的頁面)的 ASP.NET 使得動態構建真實的 Web 應用程序變得更加容易。
2)靈活的語言選項:ASP.NET 不僅支持 Microsoft Visual Basic Scripting Edition (VBScript) 和 Microsoft JScript,而且支持 25 種以上的 .NET 語言,包括對 Visual Basic .NET、Microsoft C# 和 JScript .NET 的內置支持。
3)豐富的類框架:.NET Framework 類庫提供了 4500 多種類,這些類封裝了大量的功能,諸如 XML、數據訪問、文件上載、正則表達式、圖像生成、性能監視和日誌記錄、事務、消息隊列和 SMTP 郵件。

http://www.knowsky.com/4195.html

http://www.pconline.com.cn/pce/empolder/net/asp/0509/703426.html

上面說的都很詳細

『貳』 asp.net 網站程序上傳到iis7.5出現未將對象引用設置到對象的實例

很簡單,你在本機上資料庫的連接方式是 local; 到了伺服器的話,就需要將 local;替換成 伺服器的靜態IP地址才行。

出現「未將對象引用設置到對象的實例」肯定是需要值的地方附了空值NULL,又沒有判斷,所以才會出錯。

『叄』 aspnet_client 的作用以及存儲位置

在虛擬主機的 wwwroot 目錄下您會發現有一個名為 aspnet_client 的文件夾,該文件夾中含有集成了 ASP.NET 的「SmartNavigation」功能的 javascript。如果啟用 SmartNavigation,網頁設計人員就可以在頁面以及其他內容之間保持滾動條和元素焦點的位置。

目錄 aspnet_client 是虛擬根 Web 應用程序目錄,該目錄是當您安裝 .NET Framework SDK 或 Visual Studio .NET 時在您的計算機上創建的。此文件不佔用戶空間,請用戶在使用網站空間的時候不要刪除該文件夾。

例如,隨 ASP.NET 附帶的腳本文件位於以下位置。

d:\home\ftp用戶名/wwwroot/aspnet_client/system_web/<版本編號>/文件

如果安裝有 SDK 的多個版本,您將在 aspnet_client/system_web 下看到多個子目錄。因為控制項庫與腳本文件的特定版本相關聯,所以部署模式允許控制項庫的不同版本並行運行。 出現了「aspnet_client」這個文件夾,是干什麼的?

這個是文件的路徑下還有文件!下面的完整路徑:
aspnet_client\system_web\1_1_4322

裡面還有三個文件:SmartNav.htm,smartnav.js,webuivalidation.js!

作用是:安裝了.net框架之後,就會在網站目錄下出現這樣的文件夾.用以支持.net環境.1_1_4322表示你的.net framework 的版本為 1.1.4322,裡面的3個文件用於為.net驗證控制項提供腳本支持伺服器裡面裝了.net後,會在伺服器上每個網站的目錄裡面增加這個文件夾的 在生成虛擬站點的時候會自動在根下生成一個名字為aspnet_client的文件夾,你看看是不是這個文件夾沒有了?
解決辦法重新建一個獨立站點,把生成的aspnet_client文件夾復制到這個站點的跟下。

首先確定你安裝了iis
然後從命令行進入文件夾C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\
盤符,系統文件夾,版本號可能不一樣,看你自己的機子,版本號選擇最高的那個文件夾
運行命令aspnet_regiis.exe -i
安裝完畢即可使用vs打開
一點資料:

aspnet_regiis命令詳解.
用法:
aspnet_regiis.exe[-i[r][-enable]|-u[a]|-r|-s[n]|-k[n]|-lv|-lk|-c|-e[a]|-?]
-i-安裝ASP.NET的此版本,並更新IIS元資料庫根處的
腳本映射和根以下的所有
腳本映射。現有的低版本腳本映射
升級到此版本。
-ir-安裝ASP.NET的此版本,僅注冊。不
更新IIS中的腳本映射。
-enable-帶-i或-ir指定-enable時,還將
在IIS安全控制台(IIS6.0或更高版本)中啟用ASP.NET。
-s-在指定的路徑以遞歸方式安裝此版本
的腳本映射。現有的低版本腳本映射
升級到此版本。
例如aspnet_regiis.exe-sW3SVC/1/ROOT/SampleApp1
-sn-在指定的路徑以非遞歸方式安裝此版本的
腳本映射。現有的低版本腳本映射
升級到此版本。
-r-為IIS元資料庫根位置的此版本
以及根以下的所有腳本映射安裝腳本映射。不論當前版本是什麼,
所有現有的腳本映射都
更改為此版本。
-u-卸載ASP.NET的此版本。到此版本的
現有腳本映射重新映射到此計算機上安裝的
其餘的最高ASP.NET版本。
-ua-卸載計算機上的所有ASP.NET版本
-k-從指定的路徑中以遞歸方式移除到任何ASP.NET版本的所有
腳本映射。
例如aspnet_regiis.exe-kW3SVC/1/ROOT/SampleApp1
-kn-從指定的路徑中以非遞歸方式移除到任何ASP.NET版本的所有
腳本映射。
-lv-列出計算機上安裝的所有
ASP.NET版本(包括狀態和安裝路徑)。
Status:Valid[(Root)]|Invalid
-lk-列出包含ASP.NET腳本映射的所有IIS元資料庫項的所有路徑
(連同版本一起)。不顯示從父項
繼承ASP.NET腳本映射的項。
-c-將客戶端腳本的此版本安裝到
每個IIS站點目錄的aspnet_client子目錄中。
-e-從每個IIS站點目錄的
aspnet_client子目錄中
移除客戶端腳本的此版本。
-ea-從每個IIS站點目錄的aspnet_client子目錄中
移除客戶端腳本的所有版本。
-?-列印此幫助文本。

example:
當系統新建一個asp.netweb應用程序的時候,提示錯誤信息如下:
"VisualStudio.NET已檢測到指定的Web伺服器運行的不是ASP.NET版本,你將無法運行ASP.NET應用程序或服務。"

可以嘗試運行
aspnet_regiis-i
aspnet_regiis-r
兩個命令來安裝asp.net服務管理器.
如果還是不行的話,再嘗試一下下面的操作:
1、先確定是不是1.1
2、把"IP地址"設成全部未分配
3、在IE連接設置中把本地地址不使用代理伺服器那裡打上勾

『肆』 電腦知識 :ASPNET+MS sql Server 2000+IIS

asp.net
是微軟的一種開發平台,用於軟體開發的一種工具
ms
sql
server
2000
是一種關系型資料庫軟體
iis
是windows操作系統中的系統組件,
internet
信息伺服器,
是用於架設網站的一種工具
以上三種組合是一種開發基於windows系統的BS模塊的軟體系統

『伍』 用DRMER WEAVER做的網頁,已做完,也有上傳工具,請問到底如何上傳到INTRNET上,這裡面前奏和具體步驟怎麼做

網站上傳方法匯總,製作好網頁後,如何把網頁上傳到申請的空間呢?為初學者做一個匯總。

上傳的定義

上傳就是將信息從個人計算機(本地計算機)傳遞到中央計算機(遠程計算機)系統上,讓網路上的人都能看到。將製作好的網頁、文字、圖片等發布到互聯網上去,以便讓其他人瀏覽、欣賞。這一過程稱為上傳。

上傳的來源

上傳一詞來自英文(upload),拆開來「up」為「上」,「load」為「載」,故上傳也叫上載,與下載(download)是逆過程。 網頁教學網

上傳的分類 Webjx.Com

上傳分為Web上傳和Ftp上傳,前者直接通過點擊網頁上的鏈接即可操作,後者需要專用的FTP工具。

上傳小知識
網頁教學網

在上傳主頁之前,讓我們先來認識Internet上一個基本的概念———FTP。它是英文「File Transfer Protocol」(文件傳輸協議)的縮寫,不過我們今天已經把它看成了一個動詞,意思是說在計算機和計算機之間傳輸文件。把自己製作好的主頁上傳到伺服器上,就要用到FTP。

有許多種方法可以把主頁文件上傳到Internet伺服器上,下面是常見的五種方法。

1、使用FTP軟體上傳主頁文件

這是最常用、最方便也是功能最為強大的主頁上傳方法。現在網上這類軟體很多,像CuteFtp、WS-Ftp已經廣受網友歡迎。這類軟體除了可以完成文件傳輸的功能以外,還可以通過它們完成站點管理、遠程編輯伺服器文件等工作,一些常用的FTP軟體還有斷點續傳、任務管理、狀態監控等功能,可以讓你的上傳工作變得非常輕松。

2、使用「兼職」的FTP軟體上傳主頁文件

所謂兼職的 FTP軟體,是指軟體本身並不是專門用來完成FTP功能的,主頁上傳只是其編外任務。例如我們常用的FrontPage、Dreamweaver、東方主頁王Ⅱ等都有主頁上傳、發布的功能。使用這類軟體的好處是可以在編輯主頁的同時就上傳到伺服器上查看主頁效果,省去了啟動軟體、登錄、設置等諸多麻煩。但是,這種方法往往上傳速度較慢,且難以對伺服器上的文件進行管理。

3、使用Web頁面上傳主頁文件

和前面兩種方法相比,這種方法不但沒有什麼明顯的優點,而且速度緩慢、操作麻煩、不支持斷點續傳。但是,如果你恰恰申請了一個這樣的不支持FTP的免費主頁空間,那麼就只能使用這種笨拙的方法了!

4、通過命令上傳主頁文件

在很久很久以前,Unix系統上的FTP程序是基於命令行的,現在的Window95/98/NT/2000/Me仍然有基於命令行的FTP程序(進入 DOS模式,輸入FTP就可以了)。使用這種方法首先要掌握幾十條命令不說,而且屏幕上通常只能顯示25或50行文字,很不方便。圖形界面的FTP軟體流行之後,這種方法已經被大多數網友拋棄了,只供少數骨灰級的網蟲練習他們的指法。

5、通過E-mail上傳

這種方法要求你把主頁文件通過E-mail發給系統管理員,然後再由系統管理員把它們放到伺服器上。這是最簡單也是最復雜的方法,隨著網路條件的提高,這種方法已逐漸銷聲匿跡了。

大文件上傳
Webjx.Com

以前也做過文件上傳,但都是些小文件,不超過2M。 這次要求上傳100M以上的東西。沒辦法找來資料研究了一下。基於WEB的文件上傳可以使用FTP和HTTP兩種協議,用FTP的話雖然傳輸穩定,但安全性是個嚴重的問題,而且FTP伺服器讀用戶庫獲取許可權,這樣對於用戶使用來說還是不太方便。剩下只有HTTP。在HTTP中有3種方式,PUT、WEBDAV、RFC1867,前2種方法不適合大文件上傳,目前我們使用的web上傳都是基於 RFC1867標準的HTML中基於表單的文件上傳。

一、先簡要介紹一下RFC1867(Form-based File Upload in HTML)標准:

1.帶有文件提交功能的HTML表單

現有的HTML規范為INPUT元素的TYPE屬性定義了八種可能的值,分別是:CHECKBOX, HIDDEN,MAGE,PASSWORD,RADIO,RESET,SUBMIT,TEXT。另外,當表單採用POST方式的時候,表單默認的具有「application/x-www-form-urlencoded」的ENCTYPE屬性。

RFC1867標准對HTML做出了兩處修改:

(1)為INPUT元素的TYPE屬性增加了一個FILE選項。

(2)INPUT標記可以具有ACCEPT屬性,該屬性能夠指定可被上傳的文件類型或文件格式列表。

另外,本標准還定義了一種新的MIME類型:multipart/form-data,以及當處理一個帶有ENCTYPE="multipart /form-data" 並且/或含有<INPUT type="file">的標記的表單時所應該採取的行為。

舉例來說,當HTML表單作者想讓用戶能夠上傳一個或更多的文件時,他可以這么寫:

<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>

File to process:
<INPUT NAME="userfile1" TYPE="file">

<INPUT TYPE="submit" VALUE="Send File">

</FORM>

HTML DTD里所需要做出的改動是為InputType實體增加一個選項。此外,我們也建議用一系列用逗號分隔的文件類型來作為INPUT標記的ACCEPT屬性。

... (其他元素) ...

<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX |

RADIO | SUBMIT | RESET |

網頁教學網

IMAGE | HIDDEN | FILE )">

<!ELEMENT INPUT - 0 EMPTY>

<!ATTLIST INPUT

TYPE %InputType TEXT

NAME CDATA #IMPLIED -- required for all but submit and reset

VALUE CDATA #IMPLIED

SRC %URI #IMPLIED -- for image inputs --

CHECKED (CHECKED) #IMPLIED

SIZE CDATA #IMPLIED --like NUMBERS,

but delimited with comma, not space

MAXLENGTH NUMBER #IMPLIED Webjx.Com

ALIGN (top|middle|bottom) #IMPLIED

ACCEPT CDATA #IMPLIED --list of content types

>

... (其他元素) ...

2.文件傳輸延遲

在某些情況下,在確實准備接受數據前,伺服器先對表單數據中的某些元素(比如說用戶名,賬號等)進行驗證是推薦的做法。但是,經過一定的考慮後,我們認為如果伺服器想這樣做的話,最好是採用一系列的表單,並將前面所驗證過的數據元素作為「隱藏」欄位傳回給客戶端,或者是通過安排表單使那些需要驗證的元素先顯示出來。這樣的話,那些需要做復雜的應用的伺服器可以自己維持事務處理的狀態,而那些簡單的應用的則可以實現得簡單些。

HTTP協議可能需要知道整個事務處理中的內容總長度。即使沒有明確要求,HTTP客戶端也應該提供上傳的所有文件的內容總長度,這樣一個繁忙的伺服器就能夠判斷文件的內容是否是過大以至於將不能完整地處理,從而返回一個錯誤代碼並關閉該連接,而不用等到接受了所有的數據才進行判斷。目前一些現有的 CGI應用對所有的POST事務都需要知道內容總長度。

如果INPUT標記含有一個MAXLENGTH屬性,客戶端可以將這個屬性值看作是伺服器端所能夠接受的傳送文件的最大位元組數。在這種情況下,伺服器能夠在上傳開始前,提示客戶端在伺服器上有多少空間可以用來進行文件上傳。但是應該引起注意的是,這僅僅是一個提示,在表單被創建後和文件上傳前,伺服器的實際需求可能會發生改變。

在任何情況下,如果接受的文件過大的話,任何一個HTTP伺服器都有可能在文件傳輸的過程中中斷傳輸。

3.傳輸二進制數據的其他解決辦法

有些人曾經建議使用一種新的MIME類型"aggregate",比如說aggregate/mixed 或是content-transfer-encoding "包"來描述那些不確定長度的二進制數據,而不是靠分解為多個部分來表示。雖然我們並不反對這么做,但這需要增加額外的設計和標准化工作來讓大家接受並理解"aggregate"。從另一方面來說,"分解為多部分"的機制工作得很好,能夠非常簡單的在客戶發送端和伺服器接受端加以實現,而且能像其他一些綜合處理二進制數據的方式一樣高效率地工作。

4.例子
Webjx.Com

假設伺服器段提供的是如下的HTML:

<FORM ACTION="http://server.dom/cgi/handle"

ENCTYPE="multipart/form-data"

METHOD=POST>

What is your name? <INPUT TYPE=TEXT NAME=submitter>

What files are you sending? <INPUT TYPE=FILE NAME=pics>

</FORM>

用戶在「姓名」欄位裡面填寫"Joe Blow",對問題'What files are you sending?',用戶選擇

了一個文本文件"file1.txt"。

客戶段可能發送回如下的數據:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x

content-disposition: form-data; name="field1" 網頁教學網

Joe Blow

--AaB03x

content-disposition: form-data; name="pics"; filename="file1.txt"

Content-Type: text/plain

... file1.txt 的內容...

--AaB03x--

如果用戶同時還選擇了另一個圖片文件"file2.gif",那麼客戶端可能發送的數據將是:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x

content-disposition: form-data; name="field1"

Joe Blow

--AaB03x

content-disposition: form-data; name="pics"

Content-type: multipart/mixed, boundary=BbC04y

--BbC04y

Content-disposition: attachment; filename="file1.txt"

Content-Type: text/plain

... file1.txt 的內容...

--BbC04y

Content-disposition: attachment; filename="file2.gif"

Content-type: image/gif

Content-Transfer-Encoding: binary

... file2.gif的內容...

--BbC04y--

--AaB03x--

二、利用RFC1867標准處理文件上傳的兩種方式:

Webjx.Com

1.一次性得到上傳的數據,然後分析處理。

看了N多代碼之後發現,目前無組件程序和一些COM組件都是使用Request.BinaryRead方法。一次性得到上傳的數據,然後分析處理。這就是為什麼上傳大文件很慢的原因了,IIS超時不說,就算幾百M文件上去了,分析處理也得一陣子。

2.一邊接收文件,一邊寫硬碟。

了解了一下國外的商業組件,比較流行的有Power- Web,AspUpload,ActiveFile,ABCUpload,aspSmartUpload,SA-FileUp。其中比較優秀的是 ASPUPLOAD和SA-FILE,他們號稱可以處理2G的文件(SA-FILE EE版甚至沒有文件大小的限制),而且效率也是非常棒,難道編程語言的效率差這么多?查了一些資料,覺得他們都是直接操作文件流。這樣就不受文件大小的制約。但老外的東西也不是絕對完美,ASPUPLOAD處理大文件後,內存佔用情況驚人。1G左右都是稀鬆平常。至於SA-FILE雖然是好東西但是破解難尋。然後發現2款.NET上傳組件,Lion.Web.UpLoadMole和AspnetUpload也是操作文件流。但是上傳速度和CPU佔用率都不如老外的商業組件。

做了個測試,LAN內傳1G的文件。ASPUPLOAD上傳速度平均是4.4M/s,CPU佔用10-15,內存佔用700M。SA-FILE也差不多這樣。而AspnetUpload最快也只有1.5M/s,平均是700K/s,CPU佔用15-39,測試環境: PIII800,256M內存,100M LAN。我想AspnetUpload速度慢是可能因為一邊接收文件,一邊寫硬碟。資源佔用低的代價就是降低傳輸速度。但也不得不佩服老外的程序,CPU 佔用如此之低.....。

三、ASP.NET上傳文件遇到的問題

我們在用ASP.NET上傳大文件時都遇到過這樣或那樣的問題。設置很大的maxRequestLength值並不能完全解決問題,因為ASP.NET 會block直到把整個文件載入內存後,再加以處理。實際上,如果文件很大的話,我們經常會見到Internet Explorer顯示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎麼也catch不了這個錯誤。為什麼?因為這是個client side錯誤,server side端的Application_Error是處理不到的。

四、ASP.NET大文件上傳解決方案

解決的方法是利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法從IIS為ASP.NET建立的pipe里分塊讀取數據。Chris Hynes為我們提供了這樣的一個方案(用HttpMole),該方案除了允許你上傳大文件外,還能實時顯示上傳進度。

Lion.Web.UpLoadMole和AspnetUpload 兩個.NET組件都是利用的這個方案。

方案原理:
Webjx.Com

利用HttpHandler實現了類似於ISAPI Extention的功能,處理請求(Request)的信息和發送響應(Response)。

方案要點:

1. httpHandler or HttpMole
a.在asp.net進程處理request請求之前截獲request對象
b.分塊讀取和寫入數據
c.實時跟蹤上傳進度更新meta信息

2. 利用隱含的HttpWorkerRequest用它的GetPreloadedEntityBody 和 ReadEntityBody方法處理文件流
IServiceProvider provider = (IServiceProvider) HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
int n = 1024;
byte[] bs2 = new byte[n];
while (wr.ReadEntityBody(bs2,n) >0)
{ 網頁教學網
.....
}
}

3. 自定義Multipart MIME 解析器。
自動截獲MIME分割符。
將文件分塊寫如臨時文件。
實時更新Appliaction 狀態(ReceivingData, Error, Complete) 。

熱點內容
華為還可以用android 發布:2024-07-27 19:03:01 瀏覽:494
農行密碼不能設置什麼 發布:2024-07-27 19:02:16 瀏覽:906
和利時文件夾 發布:2024-07-27 18:42:21 瀏覽:518
長鑫存儲工作難嗎 發布:2024-07-27 18:38:49 瀏覽:693
java面試簡歷 發布:2024-07-27 18:38:04 瀏覽:998
恐怖之眼密碼在哪裡 發布:2024-07-27 18:33:44 瀏覽:337
python字典按值排序 發布:2024-07-27 18:33:42 瀏覽:824
2021油猴獲取新腳本 發布:2024-07-27 18:28:44 瀏覽:223
中國移動的wifi密碼怎麼改 發布:2024-07-27 18:27:17 瀏覽:405
安卓開源的軟體代碼在哪裡 發布:2024-07-27 18:27:15 瀏覽:264