ASP.NET中FileUpload文件上传控件应用实例

 更新时间:2016年04月19日 10:39:32   作者:seeyou  
本文主要介绍FileUpload文件上传控件在实际开发中经常遇到的问题并给出解决方法,希望对大家有所帮助。

使用 FileUpload 控件,可以为用户提供一种将文件从用户的计算机发送到服务器的方法。该控件在允许用户上载图片、文本文件或其他文件时很有用。要上载的文件将在回发期间作为浏览器请求的一部分提交给服务器。在文件上载完毕后,您可以用代码管理该文件。

大致了解了一下FileUpload,让我们来看一下FileUpload几个实际应用中问题的处理方法。

1.一次上传多个文件

要一次上传多个文件,我们可以像传单个文件那样对每个文件单独进行处理,除此之外,我们还可以使用HttpFileCollection类捕获从Request对象发送来的所有文件,然后再单独对每个文件进行处理,代码如下:

复制代码 代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
    string filepath = Server.MapPath("upload") + "\\";
    HttpFileCollection uploadFiles = Request.Files;
    for (int i = 0; i < uploadFiles.Count; i++)
    {
        HttpPostedFile postedFile = uploadFiles[i];
        try
        {
            if (postedFile.ContentLength > 0)
            {
                Label1.Text += "文件 #" + (i + 1) + ":" + System.IO.Path.GetFileName(postedFile.FileName) + "<br/>";
                postedFile.SaveAs(filepath + System.IO.Path.GetFileName(postedFile.FileName));
            }
        }
        catch (Exception Ex)
        {
            Label1.Text += "发生错误: " + Ex.Message;
        }
    }
}

2.上传文件类型的验证

对上传文件类型的验证既可以在客户端进行,也可以在服务器端进行。客户端可以使用验证控件来进行,不过我们今天主要说说如何在服务器端进行验证。上边cs文件中已经用GetExtension获取了文件的扩展名,只要稍加判断即可实现上传类型的验证:

复制代码 代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        fileExt = System.IO.Path.GetExtension(FileUpload1.FileName);
        if (fileExt == ".rar" || fileExt == ".zip")
        {
            try
            {
                FileUpload1.SaveAs(Server.MapPath("upload") + "\\" + FileUpload1.FileName);
                Label1.Text = "客户端路径:" + FileUpload1.PostedFile.FileName + "<br>" +
                              "文件名:" + System.IO.Path.GetFileName(FileUpload1.FileName) + "<br>" +
                              "文件扩展名:" + System.IO.Path.GetExtension(FileUpload1.FileName) + "<br>" +
                              "文件大小:" + FileUpload1.PostedFile.ContentLength + " KB<br>" +
                              "文件MIME类型:" + FileUpload1.PostedFile.ContentType + "<br>" +
                              "保存路径:" + Server.MapPath("upload") + "\\" + FileUpload1.FileName;
            }
            catch (Exception ex)
            {
                Label1.Text = "发生错误:" + ex.Message.ToString();
            }
        }
        else
        {
            Label1.Text = "只允许上传rar、zip文件!";
        }
    }
    else
    {
        Label1.Text = "没有选择要上传的文件!";
    }
}

需要注意的是,我们不能过分依赖于客户端验证控件和服务器端上述方法的验证,因为用户只需将文件扩展名更改为允许的类型就可以避开上边的验证,这对用户来说并不是件困难的事情。

3.解决文件大小限制

在ASP.NET 2.0中FileUpload默认上传文件最大为4M,不过我们可以在web.cofig中修改相关节点来更改这个默认值,相关节点如下:

复制代码 代码如下:

<system.web>
    <httpRuntime maxRequestLength="40690" executionTimeout="6000" />
</system.web>

maxRequestLength表示可上传文件的最大值,executionTimeout表示ASP.NET关闭前允许发生的上载秒数。

4."multipart/form-data"和Request共存

在ASP程序中一旦使用表单上传文件(form的enctype属性值为multipart/form-data),服务器端就不能再用Request.Form来获取表单的值,这种限制在ASP.NET 2.0中已经不存在了:

复制代码 代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        try
        {
            FileUpload1.SaveAs(Server.MapPath("upload") + "\\" + FileUpload1.FileName);
            Label1.Text = "上传文件:" + FileUpload1.FileName + "<br>" +
                          "说明:" + Request.Form["TextBox1"];//也可以用"TextBox1.Text"来获取说明
        }
        catch (Exception ex)
        {
            Label1.Text = "发生错误:" + ex.Message.ToString();
        }
    }
    else
    {
        Label1.Text = "没有选择要上传的文件!";
    }
}

应用范例

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
 <title>无标题页</title>
</head>
<body>
 <form id="form1" runat="server">
  <asp:FileUpload ID="FileUpload1" runat="server" />
  <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
  <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="FileUpload1"
   ErrorMessage="必须是 jpg或者gif文件" ValidationExpression="^(([a-zA-Z]:)|(\\{2}\W+)\$?)(\\(\W[\W].*))+(.jpg|.Jpg|.gif|.Gif)$"></asp:RegularExpressionValidator>
 </form>

</body>
</html>

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;

public partial class _Default : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {

 }
 protected void Button1_Click(object sender, EventArgs e)
 {
  String savePath = @"F:\111\";
  if (FileUpload1.HasFile)
  {
   String filename;
   filename = FileUpload1.FileName;
   savePath +=filename;
   FileUpload1.SaveAs(savePath);
   Page.Response.Write(FileUpload1.PostedFile.ContentType + FileUpload1.PostedFile.ContentLength+"<br>");
   Page.Response.Write("<img src='"+savePath+"'>");

  }
  else
  {
   Page.Response.Write("fff");
  }
 }

}

该范例应用RegularExpressionValidator控件限制只能上传jpg、Jpg、gif、Gif格式的文件,当然最好后台也做一下限制,上面已经讲解过具体的操作方法。

相关文章

  • ASP.NET Core配置和管理Web主机

    ASP.NET Core配置和管理Web主机

    这篇文章介绍了ASP.NET Core配置和管理Web主机的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • .Net行为型设计模式之中介者模式(Mediator)

    .Net行为型设计模式之中介者模式(Mediator)

    这篇文章介绍了.Net行为型设计模式之中介者模式(Mediator),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • ASP.NET CORE基础教程

    ASP.NET CORE基础教程

    本文详细讲解了ASP.NET CORE的基础教程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • ASP.NET Session使用详解

    ASP.NET Session使用详解

    Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。
    2009-02-02
  • C#Web应用程序入门经典学习笔记之一

    C#Web应用程序入门经典学习笔记之一

    C#Web应用程序入门经典学习笔记之一...
    2006-08-08
  • 搭建基础结构的ABP解决方案介绍

    搭建基础结构的ABP解决方案介绍

    这篇文章介绍了搭建基础结构的ABP解决方案的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • ASP.Net页面生命周期与Page_Load方法的工作原理介绍

    ASP.Net页面生命周期与Page_Load方法的工作原理介绍

    这篇文章介绍了ASP.Net页面生命周期与Page_Load方法的工作原理,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 部署ASP.NET Core程序到Windows系统

    部署ASP.NET Core程序到Windows系统

    这篇文章介绍了部署ASP.NET Core程序到Windows系统的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • ASP.NET Core基础之启动设置

    ASP.NET Core基础之启动设置

    这篇文章介绍了ASP.NET Core基础之启动设置,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • SqlConnection.ConnectionString相关关键字

    SqlConnection.ConnectionString相关关键字

    SqlConnection.ConnectionString相关关键字...
    2007-01-01

最新评论