应用程序中经常需要允许用户把文件上传到web服务器。尽管在ASP.NET 1.X也可以完成该功能,但在ASP.NET 2.0中使用FileUpload控件会更简单。
该控件让用户更容易地浏览和选择用于上传的文件,它包含一个浏览按钮和用于输入文件名的文本框。只要用户在文本框中输入了完全限定的文件名,无论是直接输入或通过浏览按钮选择,都可以调用FileUpload的SaveAs方法保存到磁盘上。
除了从WebControl类继承的标准成员,FileUpload控件还公开了几个只读的属性,在表5-8和表5-9列出。
表5-8 FileUpload控件属性
名 称 类型 读 写 说 明
FileContent Stream × 返回一个指向上传文件的流对象
FileName string × 返回要上传文件的名称,不包含路径信息
HasFile Boolean × 如果是true,则表示该控件有文件要上传
PostedFile HttpPostedFile × 返回已经上传文件的引用。表5-9列出了它所公开的只读属性
表5-9 HttpPostedFile属性
名 称 类 型 读 写 说 明
ContentLength integer × 返回上传文件的按字节表示的文件大小
ContentType string × 返回上传文件的MIME内容类型
FileName string × 返回文件在客户端的完全限定名
InputStream Stream × 返回一个指向上传文件的流对象
所有这些属性将在下面的示例中说明。
为了查看FileUpload控件在实际中的运用,创建一个FileUploadDemo网站。在页面上添加一个FileUpload控件,然后,添加两个ASP.NET按钮,Text属性分别设置为Save和Display,ID分别设置为btnSave和btnDisplay。增加两个Label控件,并分别将ID设置为lblMesage和lblDisplay。用<br/>HTML元素分隔这些控件。切换到设计视图,通过双击每个按钮,为它们在代码隐藏文件中创建具有默认名称的Click事件处理程序。完成后的内容文件类似于示例5-11。
示例5-11:FileUploadDemo网站的default.aspx
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” >
<head runat=”server”>
<title>FileUpload Control</title>
</head>
<body>
<form id=”form1” runat=”server”>
<div>
<h1>FileUpload Control</h1>
<asp:FileUpload ID=”FileUpload1” runat=”server” />
<br />
<asp:Button ID=”btnSave” runat=”server” Text=”Save” OnClick=”btnSave_Click” />
<asp:Button ID=”btnDisplay” runat=”server” Text=”Display” OnClick=”btnDisplay_Click” />
<br />
<br />
<asp:Label ID=”lblMessage” runat=”server” />
<asp:Label ID=”lblDisplay” runat=”server” />
</div>
</form>
</body>
</html>
在代码隐藏文件中,添加示例5-12中高亮显示的代码,非高亮显示的代码由VS2005自动创建。
示例5-12:FileUploadDemo网站的Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO; // 使用Stream必需
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{}
protected void btnSave_Click(object sender, EventArgs e)
{
string str = “”;
if (FileUpload1.HasFile)
{
try
{
str += “Uploading file: “ + FileUpload1.FileName;
// 保存文件
FileUpload1.SaveAs(“c:websitesuploads” + FileUpload1.FileName);
// 显示文件信息
str += “<br/>Saved As: “ + FileUpload1.PostedFile.FileName;
str += “<br/>File Type: “ + FileUpload1.PostedFile.ContentType;
str += “<br/>File Length (bytes): “ + FileUpload1.PostedFile.ContentLength;
str += “<br/>PostedFile File Name: “ + FileUpload1.PostedFile.FileName;
}
catch (Exception ex)
{
str += “<br/><b>Error</b><br/>Unable to save
c:websitesuploads” + FileUpload1.FileName +“<br/>” + ex.Message;
}
}
else
{
str = “No file uploaded.”;
}
lblMessage.Text = str;
lblDisplay.Text = “”;
}
protected void btnDisplay_Click(object sender, EventArgs e)
{
string str = “<u>File: “ + FileUpload1.FileName + “</u><br/>”;
if (FileUpload1.HasFile)
{
try
{
Stream stream = FileUpload1.FileContent;
StreamReader reader = new StreamReader(stream);
string strLine = “”;
do
{
strLine = reader.ReadLine( );
str += strLine;
} while (strLine != null);
}
catch (Exception ex)
{
str += “<br/><b>Error</b><br/>Unable to display “ + FileUpload1.FileName +
“<br/>” + ex.Message;
}
}
else
{
str = “No file uploaded.”;
}
lblDisplay.Text = str;
lblMessage.Text = “”;
}
}
高亮显示的using声明对于不使用完全限定命名空间,而使用Stream对象是必须的。
在Save按钮的btnSave_Click事件处理程序中,FileUpload控件的HasFile属性用于检测文本框中是否输入了有效的完全限定文件名。如果文本框为空或输入的名称无效,将不会通过检测,并且lblMessage将显示“No file upladed”。
假定上传了一个有效文件,那么将执行try代码块中的代码。关键语句是调用File- Upload控件的SaveAs方法。该方法使用硬编码路径和FileName属性传递一个完全限定的文件名。该语句可能会由于各种原因而失败,包括磁盘空间不足、无效的路径或安全问题(稍后会有更详细的说明)。
如果SaveAs方法失败,则执行catch代码块。在lblMessage中显示一个错误信息,包括该异常的Message属性ex.Message。
如果SaveAs方法执行成功,关于上传文件的多个信息将显示在lblMessage中,这些信息通过FileUpload.PostedFile(类型为HttpPostedFile)中的属性获取。
Display按钮的Click事件处理程序与前面的类似,只不过它不是显示文件信息,而是显示文件内容。它通过使用FileContent属性获取表现为Stream对象的上传文件的内容,然后这个Stream对象被用于实例化一个StreamReader对象。StreamReader的Read- Line方法逐行的遍历文件,然后把合并后的字符串显示在lblDisplay中。
当在讨论从客户端上传文件到web服务器时,安全是非常让人关注的。须注意两点,首先,使用这种方式会公开web服务器,从而会有非常大的安全漏洞,为此要特别细心。因为这样不仅可以上传病毒,木马和其他恶意软件,还会存在客户端浏览web服务器目
录结构的危险。因此,应该使用硬编码目标目录,至少严格限定在哪里保存上传的文件。
另外,要注意的一点是,允许在磁盘写文件所必需的权限。在开发web应用程序时,一般情况下,开发机器同时也是web服务器,特别是使用VS2005默认的开发模式。在该模式下使用的是内置的web服务器,并且不通过IIS访问网站而是由文件系统访问网站。这样,永远也不会有权限问题。
然而,当网站部署到产品服务器上,且该网站通过IIS和虚拟目录来访问时,就会出现问题。这是因为运行ASP.NET的账户必须拥有对用于保存上传文件的目录的写权限。在Windows2000/XP中,账户的名称是ASPNET。在Windows Server2003中,写权限必须分配给IIS_WPG账户组。
利用FileUpload控件并结合良好的安全防护,用户可以把自己的文件传送到网站,以丰富网站功能。
默认情况下,FileUpload控件上传大小为4096kb,这是用Web.config文件的<httpRuntime>配置节中的maxRequestLength属性来设置,如果需要上传大于4096kb的文件,则需要修改这这一配置.
文件上传大小不能超过内存大小的60%.这里的60%也是web.config文件的默认配置,<procesModel>配置中的memoryLimit属性的默认值.虽然可以修改,但是这给服务器带来的负担可想而知.建议不要修改此值.
分享到:
相关推荐
Asp.net 2.0 FileUpload 控件的用法
ASP.NET_2.0高级控件之FileUpload控件
asp.net2.0新增控件的介绍 有fileupload,wizard,multiview与view,等等
FileUpload控件的基本用法 .
3.2.5 FileUpload控件的应用 3.3 其他常用控件 3.3.1 Calendar控件的应用 3.3.2 AdRotator控件的应用 3.3.3 Xml控件的应用 3.4 本章小结 第4章 验证控件 4.1 非空验证 4.2 范围验证 4.3 比较验证 4.4 ...
6.3.1 使用FileUpload控件上传文件 170 6.3.2 指定正确的ASP.NET权限给上传文件 172 6.3.3 理解文件大小的限制 173 6.3.4 把上传的文件放在Stream对象中 174 6.3.5 把文件内容从Stream对象移动到Byte数组中 175 ...
使用asp.net 2.0新控件FileUpload实现图片上传,几乎每行都有注释,适合一切初学者。。。
人民邮电出版社的ASP.NET 2.0网络编程自学手册配套关盘中的第15章 文件按上传与下载的源代码,了解上传文件和下载文件的流程、学会使用FileUpload控件实现文件上传、学会动态添加控件的功能、掌握文件的下载。
5-05.aspx FileUpload控件实现文件上传。 5-06.aspx BulletedList创建静态项目列表。 5-07.aspx BulletedList列表项响应用户事件。 5-08.aspx Image控件用法举例。 5-09.aspx 使用...
本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...
源代码 博文链接:https://joerong666.iteye.com/blog/182980
ASP.Net中FileUpLoad控件内容清空 控件: asp:FileUpload ID="upLoadFile" runat="server" onchange="CheckFileType(this)
ASP.NET中上传控件FileUpload的使用,包含:单个和多个图片(或指定文件)的上传的用法,现在献给大家哦.
文件上传功能主要利用FileUpload控件(文件上传控件)来完成,并通过按钮来实现动态添加FileUpload控件。 文件的下载先通过ListBox控件显示文件名,再选择要下载的文件名,单击“下载”按钮,将文件保存到本机。
学习积累的代码段:共计75个,Asp.Net中使用水晶报表、ASP.NET 2.0高级控件之FileUpload控件
Asp.Net中使用水晶报表 javascript提示类 分页 文件操作 ASP.NET 2.0高级控件之FileUpload控件 如何在ASP.NET页面间传送数据 等
ASP.NET使用fileupload控件上传图片到文件夹并以二进制存储于数据库中