应用ASP.NET向网络服务器上传文件 |
作者: Tony Patton |
许多网站通过网页收集资料,如用户反馈及博客文章等。能够收集文本很不错。但是,我们经常需要收集更为稳健的因素。例如,许多招聘网站收集求职者用Word文件提交的简历。标准HTML支持文件上传功能,但如果应用ASP.NET上传的话,还可以获得一些附加功能。 输入标签 标准HTML输入标签支持文件类型属性,这样就可以向网络服务器上传文件。以下是此标签的格式: <input type="file" name="fileUpload" /> 将输入标签放在HTML表单元素中。列表A中的代码显示ASP.NET页面中用到的文件上传控制。 在ASP.NET页面中应用上传标签还要其它两个属性:id与runat。id属性按程序访问元素,而runat属性则指明处理元素的位置。runat属性由服务器设定,所以它由网络服务器来处理。另外,HTML中还包含对齐页面项目的其它元素,和一个提交表单的按钮。 文件上传元素为用户提供两个选择上传文件的选项:在输入文本框中输入文件路径,或者选择浏览(Browse)按钮从本地文件系统中进行选择。一旦用户指定了文件,再选择提交(Submit)按钮,网络服务器即接管。(需要使用代码来处理请求和上传的文件。) 用ASP.NET上传 应用ASP.NET上传文件有几种方式,让我们看一看几种情形。最基本的途径是应用上传输入控制特性与方法。以下是HTML输入控制的方法与特性:
列表B中的C#语言实例对第一个代码样本进行扩充以处理上传文件。(列表C中是对应的VB.NET实例。)此页面退回以处理上传文件。ContentLength属性可避免上传空文件。FileName利用从文件本地路径中提取文件名的字符串方法在本地保存文件。SaveAs方法将文件保存在网络服务器文件夹中。BtnSubmit按钮用它的指向表单方法的ASP.NET OnServerClick事件来触发上传文件过程。 其代码应用HtmlInputFile和HttpPostedFile类。这些类(及其集合)的完整路径为:
在输入文件元素时建立HtmlputFile对象(在我们的例子中为fileUpload)。文件由表单(与HtmlInputFile对象)提交到服务器时则建立HttpPostedFile对象。只有在页面的回传事件中,HttpPostedFile对象才有效。 HtmlInputFile对象与HTML文件输入元素对应。你可用由id属性指定的名称来访问它。它有下列特性:
选择文件后,就可以用代码来保存文件。HtmlinputFile的PostedFile属性控制文件是否有效的信号。在提交文件的页面与处理上传的页面为同一页面时,实例代码工作正常,但情况并非总是如此。我们来了解一下如何在不同页面中处理文件上传! 列表B中的C#语言实例对第一个代码样本进行扩充以处理上传文件。(列表C中是对应的VB.NET实例。)此页面退回以处理上传文件。ContentLength属性可避免上传空文件。FileName利用从文件本地路径中提取文件名的字符串方法在本地保存文件。SaveAs方法将文件保存在网络服务器文件夹中。BtnSubmit按钮用它的指向表单方法的ASP.NET OnServerClick事件来触发上传文件过程。 其代码应用HtmlInputFile和HttpPostedFile类。这些类(及其集合)的完整路径为:
在输入文件元素时建立HtmlputFile对象(在我们的例子中为fileUpload)。文件由表单(与HtmlInputFile对象)提交到服务器时则建立HttpPostedFile对象。只有在页面的回传事件中,HttpPostedFile对象才有效。 HtmlInputFile对象与HTML文件输入元素对应。你可用由id属性指定的名称来访问它。它有下列特性:
选择文件后,就可以用代码来保存文件。HtmlinputFile的PostedFile属性控制文件是否有效的信号。在提交文件的页面与处理上传的页面为同一页面时,实例代码工作正常,但情况并非总是如此。我们来了解一下如何在不同页面中处理文件上传! 在不同页面中处理上传 我在最近的一个项目中应用一个以Flash为基础的界面来收集用户反馈及上传文件。Flash对象包含在一个HTML文件中,而上传处理与内容则位于另一个ASP.NET页面内。.NET Framework使这一处理过程变得简单。 ASP.NET Request对象中包含由用户提交的一切内容。Request类的Files特性可方便地对用户上传的文件进行访问。Files特性返回一个HttpFileCollection类的实例,它是HttpPostedFile对象的集合(即由用户提交的文件)。这两个类可方便地处理引入的文件。列表D中的C#实例说明了这一处理过程。(列表E包含对应的VB.NET实例。) 此代码通过HttpFileCollection对象来恢复上传文件集,并通过一个for循环,以HttpPostedFile对象处理每个上传文件,并为每个对象调用SaveAs方法,将其保存在网络服务器中。 网络页面可通过表单的行为属性调用脚本。它应该指向ASP.NET页面。列表F中的HTML代码是一个样本。 安全 你应该在网络服务器中建立文件夹,将文件保存在代码指定的目录中。另外,你还要限制上传文件的类型;例如,你要阻止恶意代码,大型视频,以及给服务器造成麻烦的内容。 你可以用文件的MIME类型来限制用户上传的文件类型。HTML标准中包含一个输入元素的行为属性,你可通过包含合法的MIME类型,利用它来限制上传的内容。见列表G。 并不是所有的网络用户都支持属性,使用代码解决方案更为可靠。列表H中的代码对第一个实例做出修改,使其只接受Word文本。如果上传文件的内容类型为微软Word的MIME类型,则只对文件进行保存。 接受所有文件 自上传输入元素出现以来,接受文件上传就是一个标准的网络作法,这没有多大的改变。但是,ASP.NET简化了提交文件的过程。通过ASP.NET页面,或者标准的HTML表单,你都可以轻松地处理提交过程,并限制用户上传的内容。 |