当前位置:首页 » 文件管理 » 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) 。

热点内容
为什么幼师忘记密码证件号码无效 发布:2024-09-08 11:46:23 浏览:189
联想存储机柜 发布:2024-09-08 11:37:38 浏览:679
安卓电脑和苹果系统哪个好 发布:2024-09-08 11:35:59 浏览:860
改进bp算法 发布:2024-09-08 11:22:23 浏览:977
酷狗怎么清除缓存 发布:2024-09-08 11:17:29 浏览:155
开发板主板交叉编译 发布:2024-09-08 11:12:59 浏览:167
手机学c语言软件 发布:2024-09-08 11:12:03 浏览:281
java培训课程有那些 发布:2024-09-08 11:11:30 浏览:652
旧笔记本如何装安卓系统 发布:2024-09-08 11:10:20 浏览:953
安卓怎么关闭蓝牙自动连接 发布:2024-09-08 10:58:12 浏览:11