上传功能

今天是八一节,打起精神,看看园子,发现吴大神的帖子,觉好,转来收藏一下。出处:http://www.cnblogs.com/wu-jian/。也谢谢大神的分享 ^_^.

//前台注册控件
<%@ Register Assembly="MattBerseth.WebControls.AJAX" Namespace="MattBerseth.WebControls.AJAX.Progress" TagPrefix="mb" %>

然后前台代码(包括JS)


<head id="Head1" runat="server">

    <title>Untitled Page</title>

    <link href="../App_Themes/css/progress.css" rel="stylesheet" type="text/css" />

    <link href="../App_Themes/css/upload.css" rel="stylesheet" type="text/css" />

    <script src="../App_Themes/JS/jquery.js" type="text/javascript"></script>

    <script language="javascript" type="text/javascript">

        var intervalID = 0;

        var progressBar;

        var fileUpload;

        var form;

        // 进度条      

        function pageLoad() {

            $addHandler($get('upload'), 'click', onUploadClick);

            progressBar = $find('progress');

        }

        // 注册表单       

        function register(form, fileUpload) {

            this.form = form;

            this.fileUpload = fileUpload;

        }

        //上传验证

        function onUploadClick() {

            var vaild = fileUpload.value.length > 0;

            if (vaild) {

                $get('upload').disabled = 'disabled';

                updateMessage('info', '初始化上传...');

                //提交上传

                form.submit();

                // 隐藏frame

                Sys.UI.DomElement.addCssClass($get('uploadFrame'), 'hidden');

                // 0开始显示进度条

                progressBar.set_percentage(0);

                progressBar.show();

                // 上传过程

                intervalID = window.setInterval(function () {

                    PageMethods.GetUploadStatus(function (result) {

                        if (result) {

                            //  更新进度条为新值

                            progressBar.set_percentage(result.percentComplete);

                            //更新信息

                            updateMessage('info', result.message);



                            if (result == 100) {

                                // 自动消失

                                window.clearInterval(intervalID);

                            }

                        }

                    });

                }, 500);

            }

            else {

                onComplete('error', '您必需选择一个文件');

            }

        }



        function onComplete(type, msg) {

            // 自动消失

            window.clearInterval(intervalID);

            // 显示消息

            updateMessage(type, msg);

            // 隐藏进度条

            progressBar.hide();

            progressBar.set_percentage(0);

            // 重新启用按钮

            $get('upload').disabled = '';

            //  显示frame

            Sys.UI.DomElement.removeCssClass($get('uploadFrame'), 'hidden');

        }

        function updateMessage(type, value) {

            var status = $get('status');

            status.innerHTML = value;

            // 移除样式

            status.className = '';

            Sys.UI.DomElement.addCssClass(status, type);

        }

    </script>



    <style type="text/css">

        BODY{ font-family:Arial, Sans-Serif; font-size:12px;}

    </style>

</head>

<body>

    <form id="form1" runat="server">

    <asp:ScriptManager ID="scriptManager" runat="server" EnablePageMethods="true" />

    <div>

        <div class="upload">

            <h3>文件上传</h3>

            <div>

                <iframe id="uploadFrame" frameborder="0" scrolling="no" src="Upload.aspx"></iframe>

                <mb:ProgressControl ID="progress" runat="server" CssClass="lightblue" style="display:none" Value="0" Mode="Manual" Speed=".4" Width="100%" />

                <div>

                    <div id="status" class="info">请选择要上传的文件</div>

                    <div class="commands">

                        <input id="upload" type="button" value="上传" /> 

                    </div>

                </div>

            </div>

        </div> 

      

    </div>

    </form>

</body>

后台:


protected void Page_Load(object sender, EventArgs args)

    {

        if (!this.IsPostBack)

        {

            this.Session["UploadInfo"] = new UploadInfo { IsReady = false };

        }

    }



    /// <summary>

    /// 

    /// </summary>

    [System.Web.Services.WebMethod]

    [System.Web.Script.Services.ScriptMethod]

    public static object GetUploadStatus()

    {

        //获取文件长度

        UploadInfo info = HttpContext.Current.Session["UploadInfo"] as UploadInfo;



        if (info != null && info.IsReady)

        {

            int soFar = info.UploadedLength;

            int total = info.ContentLength;



            int percentComplete = (int)Math.Ceiling((double)soFar / (double)total * 100);

            string message = string.Format("上传 {0} ... {1} of {2} 字节", info.FileName, soFar, total);



            //  返回百分比

            return new { percentComplete = percentComplete, message = message };

        }



        //  还没有准备好...

        return null;

    }

UploadInfo.cs 类:


using System;

using System.Data;

using System.Configuration;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;



public class UploadInfo

{

    public bool IsReady { get; set; }

    public int ContentLength { get; set; }

    public int UploadedLength { get; set; }

    public string FileName { get; set; }

}

还有就是一个页:


<%@ Page Language="C#" EnableSessionState="ReadOnly" Async="true" %>

<%@ Import Namespace="System.IO"  %>



<!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>Untitled Page</title>

    <script runat="server">

        //限制大小 1M

        protected void Page_Load2(object sender, EventArgs e)

        {

            if (this.IsPostBack)

            {

                UploadInfo uploadInfo = this.Session["UploadInfo"] as UploadInfo;

                if (uploadInfo == null)

                {

                    // 让父页面知道无法处理上传

                    const string js = "window.parent.onComplete('error', '无法上传文件。请刷新页面,然后再试一次);";

                    ScriptManager.RegisterStartupScript(this, typeof(jindutiao_upload_aspx), "progress", js, true);

                }

                else

                {

                    //  让服务端知道我们还没有准备好..

                    uploadInfo.IsReady = false;



                    //  上传验证

                    if (this.fileUpload.PostedFile != null && this.fileUpload.PostedFile.ContentLength > 0



                        && this.fileUpload.PostedFile.ContentLength < 1048576)//  限制1M

                    {

                        //  设置路径

                        string path = this.Server.MapPath(@"~/Uploads");

                        string fileName = Path.GetFileName(this.fileUpload.PostedFile.FileName);



                        // 上传信息

                        uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength;

                        uploadInfo.FileName = fileName;

                        uploadInfo.UploadedLength = 0;



                       //文件存在 初始化...

                        uploadInfo.IsReady = true;



                       //缓存

                        int bufferSize = 1;

                        byte[] buffer = new byte[bufferSize];



                        // 保存字节

                        using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.Create))

                        {                         

                            while (uploadInfo.UploadedLength < uploadInfo.ContentLength)

                            {

                               //从输入流放进缓冲区

                                int bytes = this.fileUpload.PostedFile.InputStream.Read(buffer, 0, bufferSize);

                                // 字节写入文件流

                                fs.Write(buffer, 0, bytes);

                                //  更新大小

                                uploadInfo.UploadedLength += bytes;



                                //  线程睡眠 上传就更慢 这样就可以看到进度条了

                                System.Threading.Thread.Sleep(100);

                            }

                        }



                        // 删除.

                        File.Delete(Path.Combine(path, fileName));



                        //   让父页面知道已经处理上传完毕

                        const string js = "window.parent.onComplete('success', '{0} 已成功上传');";

                        ScriptManager.RegisterStartupScript(this, typeof(jindutiao_upload_aspx), "progress", string.Format(js, fileName), true);

                    }

                    else

                    {

                        if (this.fileUpload.PostedFile.ContentLength >= 1048576)//1M

                        {

                            const string js = "window.parent.onComplete('error', '超出上传文件限制大小,请重新选择');";

                            ScriptManager.RegisterStartupScript(this, typeof(jindutiao_upload_aspx), "progress", js, true);

                        }

                        else

                        {

                            const string js = "window.parent.onComplete('error', '上传文件出错');";

                            ScriptManager.RegisterStartupScript(this, typeof(jindutiao_upload_aspx), "progress", js, true);

                        }

                    }                  

                    uploadInfo.IsReady = false;

                }

            }        

        }



        // 不限制大小

        protected void Page_Load(object sender, EventArgs e)

        {

            if (this.IsPostBack)

            {

                UploadInfo uploadInfo = this.Session["UploadInfo"] as UploadInfo;             

                uploadInfo.IsReady = false;               

                if (this.fileUpload.PostedFile != null && this.fileUpload.PostedFile.ContentLength > 0)

                {               

                    string path = this.Server.MapPath(@"~/Uploads");

                    string fileName = Path.GetFileName(this.fileUpload.PostedFile.FileName);

                   

                    uploadInfo.ContentLength = this.fileUpload.PostedFile.ContentLength;

                    uploadInfo.FileName = fileName;

                    uploadInfo.UploadedLength = 0;

                    

                    uploadInfo.IsReady = true;



                    int bufferSize = 1;

                    byte[] buffer = new byte[bufferSize];



                    using (FileStream fs = new FileStream(Path.Combine(path, fileName), FileMode.Create))

                    {

                        while (uploadInfo.UploadedLength < uploadInfo.ContentLength)

                        {

                            int bytes = this.fileUpload.PostedFile.InputStream.Read(buffer, 0, bufferSize);                          

                            fs.Write(buffer, 0, bytes);                         

                            uploadInfo.UploadedLength += bytes;

                        }

                    }

                    const string js = "window.parent.onComplete('success', '{0} 已成功上传');";

                    ScriptManager.RegisterStartupScript(this, typeof(jindutiao_upload_aspx), "progress", string.Format(js, fileName), true);

                }

                else

                {

                    const string js = "window.parent.onComplete('error', '上传文件出错');";

                    ScriptManager.RegisterStartupScript(this, typeof(jindutiao_upload_aspx), "progress", js, true);

                }

                uploadInfo.IsReady = false;

            }

        }        

    </script>

    <style type="text/css">

        BODY{margin:0; padding:0; background-color:#F0F8FF;}

    </style>

</head>

<body>

    <form id="form" runat="server" enctype="multipart/form-data">

    <asp:ScriptManager ID="scriptManager" runat="server" />

    <script type="text/javascript">

        function pageLoad(sender, args){               

            window.parent.register(

                $get('<%= this.form.ClientID %>'), 

                $get('<%= this.fileUpload.ClientID %>')

            );

        }

    </script>

    <div>

        <asp:FileUpload ID="fileUpload" runat="server" Width="100%" />

    </div>

    </form>

</body>

</html>

再次谢谢大神!

上传功能

你可能感兴趣的:(上传)