上传文件 解析

public partial class Upload : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Response.Charset = "UTF-8";
                Response.Write(upLoadFile("filedata"));  //文件名传参。有返回值JSON格式用于提示客户
            }
            catch
            {

            }
        }
        /// <summary>
        /// 上传文件
        /// </summary>
        string upLoadFile(string inputname)
        {
            string immediate;
            string attachdir;
            int dirtype;
            int maxattachsize;
            string upext;
            int msgtype;

            immediate = Request.QueryString["immediate"];//立即模式
            attachdir = "upload";     // 上传文件保存路径,结尾不要带/  UPLOAD 文件夹  用于在服务器上存储用户上传的文件夹
            dirtype = 1;              // 1:按天存入目录 2:按月存入目录 3:按扩展名存目录  建议使用按天存   目录生成的每天一个文件夹
            maxattachsize = 2097152;  // 最大上传大小,默认是2M                   文件大小限制
            upext = "txt,rar,zip,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid,doc,xls,ppt"; // 上传扩展名          EXT文件后缀名称 对应
            msgtype = 2;        //返回上传参数的格式:1,只返回url,2,返回参数数组

            string err, msg;
            err = "";
            msg = "''";

            HttpFileCollection filecollection = Request.Files;            //所有上载文件的访问提供

            // 只接收指定文件域的上传,如果需要同时接收多个文件,请通过循环方式接收
            HttpPostedFile postedfile = filecollection.Get(inputname); //单个上载文件的访问提供

            if (postedfile == null)
            {
                err = "无数据提交";
            }
            else
            {
                if (postedfile.ContentLength > maxattachsize)
                {
                    err = "文件大小超过" + maxattachsize + "字节";
                }
                else
                {
                    string attach_dir, attach_subdir, filename, extension, target;

                    // 取上载文件后缀名
                    extension = GetFileExt(postedfile.FileName);

          if (("," + upext + ",").IndexOf("," + extension + ",") < 0)//如果在所有允许后缀名成中 找到上传文件名称 的位置 <0,则证明 不包含上传后缀名文件
                    {
                        err = "上传文件扩展名必需为:" + upext;
                    }
                    else
                    {
                        switch (dirtype)
                        {
                            case 2://按月存放
                                attach_subdir = "month_" + DateTime.Now.ToString("yyMM");
                                break;
                            case 3://按扩展名存放
                                attach_subdir = "ext_" + extension;
                                break;
                            default://按日存放
                                attach_subdir = "day_" + DateTime.Now.ToString("yyMMdd"); //格式 day_20110518
                                break;
                        }
                        attach_dir = attachdir + "/" + attach_subdir + "/"; //  “Upload /day_20110518” 路径格式拼接,先定义总的文件路径,在拼接按日存放中每天所属文件夹

                        // 生成随机文件名
                        Random random = new Random(DateTime.Now.Millisecond); //文件名成为 随机的年月日小时分毫秒 构成
                        filename = DateTime.Now.ToString("yyyyMMddhhmmss") + random.Next(10000) + "." + extension; //年月日时分秒+反回一个小于指定值的最大随机数+文件名后缀   拼接文件名称

                        target = attach_dir + filename;       //拼接 文件路径+文件名称    文件所有路径信息得出

                        try
                        {
                            string rootPath = Request.ApplicationPath;     //得到项目根目录
                            if (rootPath.Substring(rootPath.Length - 1) != "/")
                            {
                                rootPath += "/";
                            }
                            CreateFolder(Server.MapPath(rootPath + attach_dir));//存入根目录下文件夹               创建文件夹
                            postedfile.SaveAs(Server.MapPath(rootPath + target));//存入根目录下文件夹             存文件到指定位置

                        }
                        catch (Exception ex)
                        {
                            err = ex.Message.ToString();                                              //格式不正确
                        }

                        // 立即模式判断
                        if (immediate == "1") target = "!" + target;
                        target = jsonString(target);

                        if (msgtype == 1)
                        {
                            msg = "'" + target + "'";
                        }
                        else
                        {   //id是用户上传的文件名
                            //localname是上传以后在服务器端的文件路径/文件名
                            msg = "{url:'../../" + target + "',hostname:'../../" + target + "',filename:'" + GetFileName(postedfile.FileName) + "'}";
                        }

                    }
                }

            }

            postedfile = null;
            filecollection = null;

            return "{err:'" + jsonString(err) + "',msg:" + msg + "}";
        }

        /// <summary>
        /// 把返回的数据转化成json格式
        /// </summary>
        string jsonString(string str)
        {
            str = str.Replace("\\", "\\\\");
            str = str.Replace("/", "\\/");
            str = str.Replace("'", "\\'");
            return str;
        }

        /// <summary>
        /// 获取文件扩展名
        /// </summary>
        /// <param name="FullPath">完整路径</param>
        /// <returns></returns>
        string GetFileExt(string FullPath)
        {
            if (FullPath != "")
            {
                return FullPath.Substring(FullPath.LastIndexOf('.') + 1).ToLower(); //最后一个‘.’之后的第一个位置开始截取  是 后缀名称
            }
            else
            {
                return "";
            }
        }

        /// <summary>
        /// 获取文件名
        /// </summary>
        /// <param name="FullPath">完整路径</param>
        /// <returns></returns>
        string GetFileName(string FullPath)
        {
            if (FullPath != "")
            {
                return FullPath.Substring(FullPath.LastIndexOf('\\') + 1).ToLower(); 
            }
            else
            {
                return "";
            }
        }

        /// <summary>
        /// 创建文件夹
        /// </summary>
        void CreateFolder(string FolderPath)
        {
            if (!System.IO.Directory.Exists(FolderPath))
            {
                System.IO.Directory.CreateDirectory(FolderPath);
            }
        }
    }

原文地址:https://www.cnblogs.com/mahaisong/p/1980553.html