附件上传

记录一种上传文件的方法。原理比较简单,直接看代码:

#region 附件上传
    /// <summary>
    /// 附件上传
    /// </summary>
    /// <param name="strReportType">报告类型</param>
    /// <param name="relativePath">相对路径</param>
    /// <returns></returns>
    public static Dictionary<string, string> UploadFilesToPatch(string strReportType, out string relativePath,out string outMsg)
    {
        ///遍历File表单元素 
        HttpFileCollection files = HttpContext.Current.Request.Files;

        string strMsg = string.Empty;
        outMsg = string.Empty;
        HttpPostedFile postedFile;
        try
        {
            int nFilelenght = Convert.ToInt32(System.Web.Configuration.WebConfigurationManager.AppSettings["maxRequestLength"]) * 1024;
            for (int iFile = 0; iFile < files.Count; iFile++)
            {
                //检查文件扩展名
                postedFile = files[iFile];
                string fileName, fileExtension;
                fileName = System.IO.Path.GetFileName(postedFile.FileName).ToLower();
                if (fileName == null || fileName == string.Empty)
                {
                    continue;
                }
                fileExtension = System.IO.Path.GetExtension(fileName).ToLower();
                if (IsAllowExtension(fileExtension))
                {
                    if (nFilelenght < postedFile.ContentLength)
                    {
                        strMsg += fileName + ": 文件大小不能超过 " + nFilelenght.ToString() + " Bytes";
                        break;
                    }
                }
                else
                {
                    strMsg += fileName + ":不支持该文件格式;";
                    break;
                }
            }
            //文件根路径
            string rootPath = ConfigurationManager.AppSettings["ReportAttachPath"];
            //文件相对路径
            relativePath = DateTime.Now.Year + "/" + strReportType + "/";
            if (strMsg == string.Empty)
            {
                //取得文件上传目录
                if (rootPath == "" || rootPath == null)
                {
                    return null;
                }

                //检查目录是否存在
                if (!System.IO.Directory.Exists(rootPath + relativePath))
                {
                    System.IO.Directory.CreateDirectory(rootPath + relativePath);
                }
                //上传文件
                Dictionary<string, string> result = new Dictionary<string, string>();
                string strFileName;
                DateTime time;
                for (int iFile = 0; iFile < files.Count; iFile++)
                {
                    if (files[iFile].FileName == null || files[iFile].FileName == string.Empty)
                    {
                        continue;
                    }
                    time = DateTime.Now;
                    strFileName = System.IO.Path.GetFileName(files[iFile].FileName);
                    files[iFile].SaveAs(rootPath + relativePath + "R" + time.ToString("yyyy-MM-dd-hh-mm-ss") + time.Ticks.ToString() + strFileName);
                    result.Add("R" + time.ToString("yyyy-MM-dd-hh-mm-ss") + time.Ticks.ToString() + strFileName, strFileName);
                }
                return result;
            }
            else
            {
                outMsg = strMsg;
                return null;
            }
        }
        catch (System.Exception Ex)
        {
            throw Ex;
        }
    }


    /// <summary>
    /// 判断文件后缀名是否被允许上传
    /// </summary>
    /// <param name="fileExtension">后缀名</param>
    /// <returns></returns>
    public static bool IsAllowExtension(string fileExtension)
    {
        if (fileExtension == null || fileExtension == string.Empty)
        {
            return false;
        }
        if (fileExtension.IndexOf('.') >= 0)
        {
            fileExtension = fileExtension.Substring(fileExtension.IndexOf('.')).ToLower();
        }
        else
        {
            fileExtension = fileExtension.ToLower();
        }
        string[] strFileExtension = System.Web.Configuration.WebConfigurationManager.AppSettings["fileExtension"].Split();
        foreach (string fe in strFileExtension)
        {
            if (fileExtension == fe)
            {
                return false;
            }
        }
        return true;
    }
    #endregion

 

posted @ 2014-03-22 10:13  fo0ol  阅读(316)  评论(0编辑  收藏  举报