一.接收上传文件
(1) FileUpLoad控件:
说明:用于用户向Web应用程序上传文件.
相关属性和方法
属性名 | 说明 |
Enable | 用于禁用FileUpload控件 |
FileBytes | 以字节数组形式获取上传文件内容 |
FileContent | 以流(stream)形式获取上传文件内容 |
FileName | 用于获得上传文件名字(包括扩展名) |
HasFile | 有上传文件时返回True |
PostedFile | 用于获取包装成HttpPostFile对象的上传文件 |
方法名 | 说明 |
Focus | 设置FileUpLoad控件的焦点 |
SaveAs() | 用于把上传文件保存到文件系统中[绝对路径] |
HttpPostFile类相关属性和方法
属性名 | 说明 |
ContentLength | 用于获得上传文件的字节大小 |
ContentType | 用于获得上传文件的类型 |
FileName | 用于获得上传文件的名字 |
InputStream | 把上传文件当成流来获取 |
方法名 | 说明 |
SaveAs | 用于把上传文件保存到文件系统中 |
(2) 把文件保存到文件系统
原理:用SaveAs方法把文件上传到指定的地方
案例:上传文件到服务器上某一个位置,并且把该目录下面的所有图片显示出来
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> protected void btUp_Click( object sender, EventArgs e)
{
if (fileUp.HasFile) // 判断是否有文件
{
Literal lt = new Literal(); // 定义一个Literal用来显示脚本
if (CheckFileType(fileUp.FileName)) // 检查上传文件的类型
{
string filePath = " ~/file/ " + fileUp.FileName;
fileUp.SaveAs(MapPath(filePath)); // 把文件上传到服务器的绝对路径上
lt.Text = " <script>alert('文件上传成功!~')</script> " ;
}
else
{
lt.Text = " <script>alert('文件类型不正确!~')</script> " ;
}
this .Controls.Add(lt);
}
}
// 用来获取文件类型
public bool CheckFileType( string fileName)
{
// 获取文件的扩展名,前提要用这个方法必须引入命名空间io
string ext = Path.GetExtension(fileName);
switch (ext.ToLower())
{
case " .gif " :
return true ;
case " .png " :
return true ;
case " .jpeg " :
return true ;
case " jpg " :
return true ;
default :
return false ;
}
}
注意事项:为了使文件能上传到服务器,ASP.NET页面关联的Window账户必须有足够的权限来保存文件,设置权限的方法,在要上传的目录中点击右键—选择安全----为NETWORK SERVICE或ASP.NET账户提供该文件夹的写权限
把上传的文件显示到DataList中
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> string upPath = MapPath( " ~/file/ " );
DirectoryInfo dir = new DirectoryInfo(upPath);
DataList1.DataSource = dir.GetFiles();
DataList1.DataBind();
(3) 把文件保存到数据库
优缺点:
优点:可以避免文件系统权限问题,其次把文件保存在数据库中能更方便地备份信息
缺点:在数据库中保存和检索文件会给服务器端增加压力
原理:
利用FileUpLoad控件的FileBytes属性来获取字节数组
数据表格设计:
字段名 | 数据类型 | 说明 |
Id | Int(identity) | 文件编号 |
FileName | varchar(50) | 文件名 |
FileLength | Int | 文件大小 |
FileFiter | Varchar(20) | 文件扩展名 |
FileBytes | Image | 文件字节数组 |
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> protected void btUp_Click( object sender, EventArgs e)
{
if (fileUp.HasFile)
{
string strCon = " server=.;database=test;uid=sa;pwd= " ;
SqlConnection sqlcon = new SqlConnection(strCon);
sqlcon.Open();
SqlCommand sqlcom = new SqlCommand();
sqlcom.Connection = sqlcon;
sqlcom.CommandText = " insert into [File] values(@FileName,@FileLength,@FileFiter,@FileBytes) " ;
sqlcom.Parameters.Add( " @FileName " , SqlDbType.VarChar).Value = fileUp.FileName;
sqlcom.Parameters.Add( " @FileLength " , SqlDbType.Int).Value = fileUp.FileBytes.Length;
sqlcom.Parameters.Add( " @FileFiter " , SqlDbType.VarChar).Value = Path.GetExtension(fileUp.FileName);
sqlcom.Parameters.Add( " @FileBytes " , SqlDbType.Image).Value = fileUp.FileBytes;
sqlcom.ExecuteNonQuery();
sqlcon.Close();
}
}
(4) 上传大文件
说明:ASP.NET中默认是不能提交大于4MB的表单,如果超过这个这个值就会报异常,解决方法需要配置web.config文件
<system.web> <httpRuntime maxRequestLength="10240" requestLengthDiskThreshold="100" executionTimeout="600" /> </system.web> |
maxRequestLength文件上传的最大字节数,以kb为单位
requestLengthDiskThreshold文件上传时缓存的大小
executionTimeout文件上传的最大时间以秒为单位
(5) 总结
(1) System.IO.GetExtension()提取指定路径的扩展名
(2) MapPath()获取指定虚拟路径对应的服务器物理路径
(3) 为了防止文件名字相同,我们一般用上传的当前时间为文件名