代码改变世界

多文件上传测试(转)

2010-08-14 20:41  音乐让我说  阅读(713)  评论(0编辑  收藏  举报

转载自孟子E章 :http://dotnet.aspx.cc/article/58ea3515-36f2-4fd9-ac89-eaf49f59816c/read.aspx

 

前台代码如下:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestUpload.aspx.cs" Inherits="WebUI.TestUpload" %>

<!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>
    <script language="javascript" type="text/javascript">
        function addFile()
        {
            var div = document.createElement("div");
            var f = document.createElement("input");
            f.setAttribute("type", "file");
            f.setAttribute("name", "File");
            f.setAttribute("size", "50");
            div.appendChild(f);
            var d = document.createElement("input");
            d.setAttribute("type", "button");
            d.onclick = function() { deleteFile(this); }
            d.setAttribute("value", "移除");
            div.appendChild(d);
            document.getElementById("_container").appendChild(div);
        }
        function deleteFile(o)
        {
            while (o.tagName != "DIV")
            {
                o = o.parentNode;
            };
            o.parentNode.removeChild(o);
        }
    </script>

</head>
<body>
    <form id="form1" runat="server" method="post" enctype="multipart/form-data">
    <h3>
        多文件上传</h3>
    用户名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <div id="_container">
        <input type="file" size="50" name="File" />
    </div>
    <div>
        <input type="button" value="添加文件(Add)" onclick="addFile()" />
    </div>
    <div style="padding: 10px 0">
        <asp:Button runat="server" Text="开始上传" ID="UploadButton" OnClick="UploadButton_Click">
        </asp:Button>
    </div>
    <div>
        <asp:Label ID="strStatus" runat="server" Font-Names="宋体" Font-Bold="True" Font-Size="9pt"
            Width="500px" BorderStyle="None" BorderColor="White"></asp:Label>
    </div>
    </form>
</body>
</html>

 

后台代码如下:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

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

        }

        protected void UploadButton_Click(object sender, EventArgs e)
        {
            //遍历File表单元素
            HttpFileCollection files = HttpContext.Current.Request.Files;

            //状态信息
            System.Text.StringBuilder strMsg = new System.Text.StringBuilder("您输入的用户名是:" + TextBox1.Text + "<br/>");
            strMsg.Append("上传的文件分别是:<hr color='red'/>");
            try
            {
                for (int i = 0; i < files.Count; i++)
                {
                    //检查文件扩展名字
                    HttpPostedFile postedFile = files[i];
                    string fileName, fileExtension;
                    fileName = System.IO.Path.GetFileName(postedFile.FileName);
                    if (fileName != "")
                    {
                        fileExtension = System.IO.Path.GetExtension(fileName);
                        strMsg.Append("上传的文件类型:" + postedFile.ContentType.ToString() + "<br>");
                        strMsg.Append("客户端文件地址:" + postedFile.FileName + "<br>");
                        strMsg.Append("上传文件的文件名:" + fileName + "<br>");
                        strMsg.Append("上传文件的扩展名:" + fileExtension + "<br><hr>");
                        //可根据扩展名字的不同保存到不同的文件夹
                        //注意:可能要修改你的文件夹的匿名写入权限。
                        postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("images/") + fileName);
                    }
                }
                strStatus.Text = strMsg.ToString();
            }
            catch (Exception Ex)
            {
                strStatus.Text = Ex.Message;
            }
        }
    }
}

 

最简单的文件上传

View 层:

@{
    ViewBag.Title = "主页";
}

<h2>文件上传</h2>
<div>
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="FileUpload1" /><br /><br /><br />
    <input type="file" name="FileUpload2" /><br /><br /><br />
    <input type="file" name="FileUpload3" /><br /><br /><br />
    <input type="file" name="FileUpload4" /><br /><br /><br />
    <input type="file" name="FileUpload5" /><br /><br /><br />
    <input type="submit" name="Submit" id="Submit" value="上传" />
}
</div>

 

Controller 层:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(FormCollection form)
    {
        // 注意,别忘了在 Web.Config 中配置最大支持的文件大小,我这里设置的是 512 MB
        //  <!-- 最大上传 512MB = 1024 * 512 = 524288 KB -->
        //  <httpRuntime maxRequestLength="524288"/>

        foreach (string upload in Request.Files)
        {
            // 注意:枚举器返回的是 System.String,千万不要放置 System.Web.HttpPostedFileBase ,否则会抛出下面的异常:
            // 注意:无法将类型为“System.String”的对象强制转换为类型“System.Web.HttpPostedFileBase”。 
            if (!Request.Files[upload].HasFile())
            {
                continue;
            }
            string dirPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "uploads");
            if (!Directory.Exists(dirPath))
            {
                try
                {
                    Directory.CreateDirectory(dirPath);
                }
                catch (Exception)
                {
                    throw new Exception("创建目录失败!请练习管理员");
                }
            }
            string filename = Path.GetFileName(Request.Files[upload].FileName);
            Request.Files[upload].SaveAs(Path.Combine(dirPath, filename));
        }
        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}


public static class WebExtensions
{
    /// <summary>
    /// 判断是否有文件
    /// </summary>
    /// <param name="file"></param>
    /// <returns></returns>
    public static bool HasFile(this HttpPostedFileBase file)
    {
        return (file != null && file.ContentLength > 0) ? true : false;
    }
}

 

谢谢浏览!