.net上传控件

来源:互联网 发布:ubuntu启动黑屏 编辑:程序博客网 时间:2024/06/05 15:01

一.接收上传文件

(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":

               
returntrue;

           
case".png":

               
returntrue;

           
case".jpeg":

               
returntrue;

           
case"jpg":

               
returntrue;

           
default:

               
returnfalse;

        }

    }
复制代码

注意事项:为了使文件能上传到服务器,ASP.NET页面关联的Window账户必须有足够的权限来保存文件,设置权限的方法,在要上传的目录中点击右键—选择安全----为NETWORK SERVICE或ASP.NET账户提供该文件夹的写权限

.net文件上传 - jeyor - jeyorxiao 的博客

把上传的文件显示到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)            为了防止文件名字相同,我们一般用上传的当前时间为文件名

原创粉丝点击