zoukankan      html  css  js  c++  java
  • jquery+ajax 文件上传功能(无ifram嵌套)

    这两天做项目(MVC3),很多地方都需要使用到文件上传功能,但是采用的方式都是通过submit表单的方式来实现附件的上传的,这样感觉每次都要刷新页面很不爽,所以想来想去还是准备写一个通用的文件上传功能来实现文件上传。

    既然决定要做就马上动手,这次我采用的方式是,jquery+ajax来实现文件的上传,这里需要使用一个别人写的js插件:jquery-form.js,相关文档资料地址:http://www.aqee.net/docs/jquery.form.plugin/jquery.form.plugin.html#api

    通过使用上述插件,我可以通过ajax来提交表单,而不会刷新页面。主要使用的方法是 $("#myformID").ajaxSubmit()方法。

    好了废话不多说,还是上代码:

    首先是展示页面需要做的:分别引入jquery.js,jquery-form.js,还有fileload.js

    以下是展示页面代码:

    <!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>
        <link href="CSS/Style.css" rel="Stylesheet" />
        <script type="text/javascript" src="jquery.js"></script>
        <script src="project/js/jquery.form.js" type="text/javascript"></script>
        <script src="project/js/fileload.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                createHtml($("#str"));
            })
        </script>
    </head>
    <body>
        <div id="str">
            
        </div>
    </body>
    </html>
    

    下面是fileload.js代码:

    View Code
    function createHtml(obj) {
        var htmstr = [];
        htmstr.push(  "<form id='_fileForm' enctype='multipart/form-data'>");
        htmstr.push(  "<table cellspacing=\"0\" cellpadding=\"3\" style=\"margin:0 auto; margin-top:20px;\">");
        htmstr.push(  "<tr>");
        htmstr.push(  "<td class=\"tdt tdl\">请选择文件:</td>");
        htmstr.push(  "<td class=\"tdt tdl\"><input id=\"loadcontrol\" type=\"file\" name=\"filepath\" id=\"filepath\" /></td>");
        htmstr.push(  "<td class=\"tdt tdl tdr\"><input type=\"button\" onclick=\"fileloadon()\" value=\"上传\"/></td>");
        htmstr.push(  "</tr>");
        htmstr.push(  "<tr> <td class=\"tdt tdl tdr\" colspan='3'style='text-align:center;'><div id=\"msg\">&nbsp;</div></td> </tr>");
        htmstr.push(  "<tr> <td class=\"tdt tdl tdr\" style=\" vertical-align:middle;\">图片预览:</td> <td class=\"tdt tdl tdr\" colspan=\"2\"><div style=\"text-align:center;\"><img src=\"project/Images/NoPhoto.jpg\"/></div></td> </tr>");
        htmstr.push(  "</table>")
        htmstr.push(  "</form>");
        obj.html(htmstr.join(""));
    }
    
    function fileloadon() {
        $("#msg").html("");    
        $("img").attr({ "src": "project/Images/processing.gif" });
        $("#_fileForm").submit(function () {   
            $("#_fileForm").ajaxSubmit({
                type: "post",
                url: "project/help.aspx",
                success: function (data1) {
                var remsg = data1.split("|");
                var name = remsg[1].split("\/");
                if (remsg[0] == "1") {
                var type = name[4].substring(name[4].indexOf("."), name[4].length);
                $("#msg").html("文件名:" + name[name.length - 1] + "   ---  " + remsg[2]);
                switch (type) {
                    case ".jpg":
                    case ".jpeg":
                    case ".gif":
                    case ".bmp":
                    case ".png":
                    $("img").attr({ "src": remsg[1] });
                    break;
                default:
                    $("img").attr({ "src": "project/Images/msg_ok.png" });
                    break;
                }
                } else {
                    $("#msg").html("文件上传失败:" + remsg[2]);
                    $("img").attr({ "src": "project/Images/msg_error.png" });
                }
                },
                error: function (msg) {
                    alert("文件上传失败");    
                }
            });
            return false;
        });
        $("#_fileForm").submit();
    }


    在下面是服务页面的代码:

    View Code
     protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                HttpPostedFile postFile = Request.Files[0];
                //开始上传
                string _savedFileResult = UpLoadFile(postFile);
                Response.Write(_savedFileResult);
    
            }
            catch(Exception ex)
            {
                Response.Write("0|error|上传提交出错");
            }
    
        }
        public string UpLoadFile(HttpPostedFile str)
        {
            return UpLoadFile(str, "/UpLoadFile/");
        }
        public string UpLoadFile(HttpPostedFile httpFile, string toFilePath)
        {
            try
            {
                //获取要保存的文件信息
                string filerealname = httpFile.FileName;
                //获得文件扩展名
                string fileNameExt = System.IO.Path.GetExtension(filerealname);
                if (CheckFileExt(fileNameExt))
                {
                    //检查保存的路径 是否有/结尾
                    if (toFilePath.EndsWith("/") == false) toFilePath = toFilePath + "/";
    
                    //按日期归类保存
                    string datePath = DateTime.Now.ToString("yyyyMM") + "/" + DateTime.Now.ToString("dd") + "/";
                    if (true)
                    {
                        toFilePath += datePath;
                    }
    
                    //物理完整路径                    
                    string toFileFullPath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + toFilePath;
    
                    //检查是否有该路径  没有就创建
                    if (!System.IO.Directory.Exists(toFileFullPath))
                    {
                        Directory.CreateDirectory(toFileFullPath);
                    }
    
                    //得到服务器文件保存路径
                    string toFile = Server.MapPath("~" + toFilePath);
                    string f_file = getName(filerealname);
                    //将文件保存至服务器
                    httpFile.SaveAs(toFile + f_file);
                    return "1|" + toFilePath + f_file + "|" + "文件上传成功";
                }
                else
                {
                    return "0|errorfile|" + "文件不合法";
                }
            }
            catch (Exception e)
            {
                return "0|errorfile|" + "文件上传失败,错误原因:" + e.Message;
            }
        }
    
        /// <summary>
        /// 获取文件名
        /// </summary>
        /// <param name="fileNamePath"></param>
        /// <returns></returns>
        private string getName(string fileNamePath)
        {
            string[] name = fileNamePath.Split('\\');
            return name[name.Length - 1];
        }
        /// <summary>
        /// 检查是否为合法的上传文件
        /// </summary>
        /// <param name="_fileExt"></param>
        /// <returns></returns>
        private bool CheckFileExt(string _fileExt)
        {
            string[] allowExt = new string[] { ".gif", ".jpg", ".jpeg", ".rar",".png" };
            for (int i = 0; i < allowExt.Length; i++)
            {
                if (allowExt[i] == _fileExt) { return true; }
            }
            return false;
    
        }
    
        public static string GetFileName()
        {
            Random rd = new Random();
            StringBuilder serial = new StringBuilder();
            serial.Append(DateTime.Now.ToString("HHmmss"));
            serial.Append(rd.Next(100, 999).ToString());
            return serial.ToString();
    
        }

    代码比较简单,看官有疑问可以评论,我会逐一回复。

    运行defualt.aspx页面以后显示的效果是:

    上传图片则显示对应的图片:

     上传压缩文件(.rar)则显示上传成功图片:

    由于服务端对文件类型有限制,如果需要支持更多类型的文件,请在服务端代码中进行修改

    界面比较粗糙,看官见笑了...

    附上源代码(直接通过调试运行代码,显示不出图片预览,发布出来以后就没有问题):https://files.cnblogs.com/xlhblogs/ajax_FileUP.rar

  • 相关阅读:
    一月份反思内容:BUG & Communicate
    重构一个繁琐的数据结构
    GTD(Get Things Done)
    SortedList<TKey,TValue> 和 SortedDictionary<TKey,TValue>
    对Ado.net Entity Data Model Designer很失望
    A class to clone objects
    collection.All(x=> whatever(x)) 与 collection.Any(x=>whatever(x))
    Asp.net MVC里的TempData是一个整体
    Some tips about ubuntu server | or it may works on other linux distributions too
    每个程序员都必须遵守的编程原则
  • 原文地址:https://www.cnblogs.com/xlhblogs/p/2577116.html
Copyright © 2011-2022 走看看