查看: 8487|回复: 3
打印 上一主题 下一主题

应用ASP.NET向网络服务器上传文件

[复制链接]
跳转到指定楼层
1#
发表于 2007-10-4 11:39:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
许多网站通过网页收集资料,如用户反馈及博客文章等。能够收集文本很不错。但是,我们经常需要收集更为稳健的因素。例如,许多招聘网站收集求职者用Word文件提交的简历。标准HTML支持文件上传功能,但如果应用ASP.NET上传的话,还可以获得一些附加功能。

输入标签

标准HTML输入标签支持文件类型属性,这样就可以向网络服务器上传文件。以下是此标签的格式:

<input type="file" name="fileUpload" />

将输入标签放在HTML表单元素中。列表A中的代码显示ASP.NET页面中用到的文件上传控制。

列表A

<%@ Page %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head><title> TechRepublic File Upload Example </title>
</head><body>
<h2 align="center">TechRepublic File Upload Example</h2>
<div id="divCenter" align="center">
<form id="frmFileUploadDemo" method="post" runat="server">
<input type="file" name="fileUpload" id="fileUpload" runat="server" size="50" />
<br /><br />
<input type="submit" id="butSubmit" value="Submit" runat="server">
</form></div></body></html>在ASP.NET页面中应用上传标签还要其它两个属性:id与runat。id属性按程序访问元素,而runat属性则指明处理元素的位置。runat属性由服务器设定,所以它由网络服务器来处理。另外,HTML中还包含对齐页面项目的其它元素,和一个提交表单的按钮。

文件上传元素为用户提供两个选择上传文件的选项:在输入文本框中输入文件路径,或者选择浏览(Browse)按钮从本地文件系统中进行选择。一旦用户指定了文件,再选择提交(Submit)按钮,网络服务器即接管。(需要使用代码来处理请求和上传的文件。)

用ASP.NET上传

应用ASP.NET上传文件有几种方式,让我们看一看几种情形。最基本的途径是应用上传输入控制特性与方法。以下是HTML输入控制的方法与特性:

FileName:用户计算机上的完全合格的文件名称。它还包含上传文件的本地路径。
ContentLength:上传文件的大小(字节)。
ContentType:上传文件的MIME内容类型。
InputStream:返回一个指向上传文件的流(Stream)对象,允许你阅读文件内容。
SaveAs:方便保存上传文件的内容。
列表B中的C#语言实例对第一个代码样本进行扩充以处理上传文件。(列表C中是对应的VB.NET实例。)此页面退回以处理上传文件。ContentLength属性可避免上传空文件。FileName利用从文件本地路径中提取文件名的字符串方法在本地保存文件。SaveAs方法将文件保存在网络服务器文件夹中。BtnSubmit按钮用它的指向表单方法的ASP.NET OnServerClick事件来触发上传文件过程。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
2#
 楼主| 发表于 2007-10-4 11:40:38 | 只看该作者
台州网址导航
列表B

<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head><title> TechRepublic File Upload Example </title>
</head>
<script language="c#" runat="server">
private void btnSubmit_Click(object o, EventArgs e) {
if (fileUpload.PostedFile != null) {
string uploadPath = "files";
string filename;
try {
if (fileUpload.PostedFile.ContentLength > 0) {int pos = fileUpload.PostedFile.FileName.LastIndexOf("\\");
if (pos > 0)
filename = fileUpload.PostedFile.FileName.Substring(pos + 1);
else
filename = fileUpload.PostedFile.FileName;Response.Write(Server.MapPath(uploadPath) + "\\" + filename);fileUpload.PostedFile.SaveAs(Server.MapPath(uploadPath) + "\\" + filename);
} else Response.Write("Empty file may not be uploaded.");
} catch (Exception ex) {Response.Write("Error: " + ex.Message.ToString());
} } }
</script>
<body>
<h2 align="center">TechRepublic File Upload Example</h2>
<div id="divCenter" align="center">
<form id="frmFileUploadDemo" method="post" runat="server">
<input type="file" name="fileUpload" id="fileUpload" runat="server" size="50" />
<br /><br />
<input type="submit" id="btnSubmit" value="Submit" runat="server" OnServerClick="btnSubmit_Click" />
</form></div></body></html>列表C


<%@ Page language="vb" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head><title> TechRepublic File Upload Example </title>
</head>
<script language="vb" runat="server">
Sub btnSubmit_Click(o As Object, e As EventArgs)
If Not (fileUpload.PostedFile Is Nothing) Then
Dim uploadPath As String = "files"
Dim filename As String
Try
If (fileUpload.PostedFile.ContentLength > 0) Then
Dim pos As Integer
pos = fileUpload.PostedFile.FileName.LastIndexOf("\")
If (pos > 0) Then
filename = fileUpload.PostedFile.FileName.Substring(pos + 1)
Else
filename = fileUpload.PostedFile.FileName
End IfResponse.Write(Server.MapPath(uploadPath) + "\" + filename)fileUpload.PostedFile.SaveAs(Server.MapPath(uploadPath) + "\" + filename)
Else Response.Write("Empty file may not be uploaded.")
End If
Catch ex As ExceptionResponse.Write("Error: " + ex.Message.ToString())
End Try
End If
End Sub
</script>
<body><h2 align="center">TechRepublic File Upload Example</h2>
<div id="divCenter" align="center">
<form id="frmFileUploadDemo" method="post" runat="server">
<input type="file" name="fileUpload" id="fileUpload" runat="server" size="50" />
<br /><br />
<input type="submit" id="btnSubmit" value="Submit" runat="server" OnServerClick="btnSubmit_Click" />
</form></div></body></html>其代码应用HtmlInputFile和HttpPostedFile类。这些类(及其集合)的完整路径为:

System.Web.UI.HtmlControls.HtmlInputFile
System.Web.HttpPostedFile
在输入文件元素时建立HtmlputFile对象(在我们的例子中为fileUpload)。文件由表单(与HtmlInputFile对象)提交到服务器时则建立HttpPostedFile对象。只有在页面的回传事件中,HttpPostedFile对象才有效。
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
3#
 楼主| 发表于 2007-10-4 11:41:42 | 只看该作者
台州网址导航
HtmlInputFile对象与HTML文件输入元素对应。你可用由id属性指定的名称来访问它。它有下列特性:

PostedFile:上传文件的内容。
Accept:以逗号界定的MIME类型列表,指定可能提交的文件类型。
MaxLength:要提交的文件的最长文件名长度(包括路径)。
Size:用户输入/选择上传文件的文本框宽度。
选择文件后,就可以用代码来保存文件。HtmlinputFile的PostedFile属性控制文件是否有效的信号。在提交文件的页面与处理上传的页面为同一页面时,实例代码工作正常,但情况并非总是如此。我们来了解一下如何在不同页面中处理文件上传!

在不同页面中处理上传

我在最近的一个项目中应用一个以Flash为基础的界面来收集用户反馈及上传文件。Flash对象包含在一个HTML文件中,而上传处理与内容则位于另一个ASP.NET页面内。.NET Framework使这一处理过程变得简单。

ASP.NET Request对象中包含由用户提交的一切内容。Request类的Files特性可方便地对用户上传的文件进行访问。Files特性返回一个HttpFileCollection类的实例,它是HttpPostedFile对象的集合(即由用户提交的文件)。这两个类可方便地处理引入的文件。列表D中的C#实例说明了这一处理过程。(列表E包含对应的VB.NET实例。)

列表D


<%@ Page language="c#" %>
<script language="c#" runat="Server">
string uploadFolder = "files";
private void Page_Load(object sender, System.EventArgs e) {
if (!IsPostBack) {
try {HttpFileCollection uploads = Request.Files;HttpPostedFilepostedFile = null;
string savePath = Server.MapPath(uploadFolder);
string filename;
for (int x=0; x <= (uploads.Count); x++) {postedFile = uploads[x];int pos = postedFile.FileName.LastIndexOf("\\");
if (pos > 0) {
filename = postedFile.FileName.Substring(pos + 1);
} else {
filename = postedFile.FileName;
}postedFile.SaveAs(savePath + "\\" + filename);
}? } catch (Exception ex) {
// Handle exception
} } }
</script>列表E


<%@ Page language="vb" ContentType="text/plain" debug="true" %>
<script language="vb" runat="Server">
Dim uploadFolder As String
Sub Page_Load()
If Not (IsPostBack) Then
Try
Dim uploads As HttpFileCollection
uploads = Request.Files
Dim postedFile As HttpPostedFile
Dim savePath As string savePath = Server.MapPath(uploadFolder)
Dim filename As String
Dim x As Integer
Dim pos As Integer
For x = 0 to (uploads.Count - 1)postedFile = uploads(x)
pos = postedFile.FileName.LastIndexOf("\")
If (pos > 0) Then
filename = postedFile.FileName.Substring(pos + 1)
Else
filename = postedFile.FileName
End IfpostedFile.SaveAs(savePath + "\" + filename)
Next x
Catch ex As Exception
' Handle exception
End Try
End If
End Sub
</script>此代码通过HttpFileCollection对象来恢复上传文件集,并通过一个for循环,以HttpPostedFile对象处理每个上传文件,并为每个对象调用SaveAs方法,将其保存在网络服务器中。
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
4#
 楼主| 发表于 2007-10-4 11:44:52 | 只看该作者
台州网址导航
网络页面可通过表单的行为属性调用脚本。它应该指向ASP.NET页面。列表F中的HTML代码是一个样本。

列表F


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head><title> TechRepublic File Upload Example </title>
</head><body>
<form id="frmFileUploadDemo" name="frmFileUploadDemo" action="upload.aspx">
<input type="file" name="fileUpload" id="fileUpload" />
<br /><br />
<input type="submit" id="butSubmit" value="Submit" />
</form></body></html>安全

你应该在网络服务器中建立文件夹,将文件保存在代码指定的目录中。另外,你还要限制上传文件的类型;例如,你要阻止恶意代码,大型视频,以及给服务器造成麻烦的内容。

你可以用文件的MIME类型来限制用户上传的文件类型。HTML标准中包含一个输入元素的行为属性,你可通过包含合法的MIME类型,利用它来限制上传的内容。见列表G。

列表G

<Input type="file" name="fileUpload" id="fileUpload" runat="Server" accept="application/msword" />

并不是所有的网络用户都支持属性,使用代码解决方案更为可靠。列表H中的代码对第一个实例做出修改,使其只接受Word文本。如果上传文件的内容类型为微软Word的MIME类型,则只对文件进行保存。

列表H


>
<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head><title> TechRepublic File Upload Example </title>
</head>
<script language="c#" runat="server">
private void btnSubmit_Click(object o, EventArgs e) {
if (fileUpload.PostedFile != null) {
string uploadPath = "files";
string filename;
try {
if (fileUpload.PostedFile.ContentLength > 0) {
if (fileUpload.PostedFile.ContentType == "application/msword") {int pos = fileUpload.PostedFile.FileName.LastIndexOf("\\");
if (pos > 0)
filename = fileUpload.PostedFile.FileName.Substring(pos + 1);
else
filename = fileUpload.PostedFile.FileName;fileUpload.PostedFile.SaveAs(Server.MapPath(uploadPath) + "\\" + filename);
} else {Response.Write("You may only upload Word documents.");
} } else Response.Write("Empty file may not be uploaded.");
} catch (Exception ex) {Response.Write("Error: " + ex.Message.ToString());
} } }
</script>
<body>
<h2 align="center">TechRepublic File Upload Example</h2>
<div id="divCenter" align="center">
<form id="frmFileUploadDemo" method="post" runat="server">
<input type="file" name="fileUpload" id="fileUpload" runat="server" size="50"
accept="application/ms-word" />
<br /><br />
<input type="submit" id="btnSubmit" value="Submit" runat="server" OnServerClick="btnSubmit_Click" />
</form></div></body></html>>
接受所有文件

自上传输入元素出现以来,接受文件上传就是一个标准的网络作法,这没有多大的改变。但是,ASP.NET简化了提交文件的过程。通过ASP.NET页面,或者标准的HTML表单,你都可以轻松地处理提交过程,并限制用户上传的内容。

Tony Patton拥有丰富的Java、VB、Lotus及XML方面的知识,是一个专业的应用程序开发人员。
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表