204 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			204 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using System.Web;
							 | 
						||
| 
								 | 
							
								using System.IO;
							 | 
						||
| 
								 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace FineUIPro.Examples.res.umeditor.net
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// <summary>
							 | 
						||
| 
								 | 
							
								    /// UEditor编辑器通用上传类
							 | 
						||
| 
								 | 
							
								    /// </summary>
							 | 
						||
| 
								 | 
							
								    public class Uploader
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        string state = "SUCCESS";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        string URL = null;
							 | 
						||
| 
								 | 
							
								        string currentType = null;
							 | 
						||
| 
								 | 
							
								        string uploadpath = null;
							 | 
						||
| 
								 | 
							
								        string filename = null;
							 | 
						||
| 
								 | 
							
								        string originalName = null;
							 | 
						||
| 
								 | 
							
								        HttpPostedFile uploadFile = null;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								      * 上传文件的主处理方法
							 | 
						||
| 
								 | 
							
								      * @param HttpContext
							 | 
						||
| 
								 | 
							
								      * @param string
							 | 
						||
| 
								 | 
							
								      * @param  string[]
							 | 
						||
| 
								 | 
							
								      *@param int
							 | 
						||
| 
								 | 
							
								      * @return Hashtable
							 | 
						||
| 
								 | 
							
								      */
							 | 
						||
| 
								 | 
							
								        public Hashtable upFile(HttpContext cxt, string pathbase, string[] filetype, int size)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            pathbase = pathbase + DateTime.Now.ToString("yyyy-MM-dd") + "/";
							 | 
						||
| 
								 | 
							
								            uploadpath = cxt.Server.MapPath(pathbase);//获取文件上传路径
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            try
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                uploadFile = cxt.Request.Files[0];
							 | 
						||
| 
								 | 
							
								                originalName = uploadFile.FileName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                //目录创建
							 | 
						||
| 
								 | 
							
								                createFolder();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                //格式验证
							 | 
						||
| 
								 | 
							
								                if (checkType(filetype))
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    state = "不允许的文件类型";
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                //大小验证
							 | 
						||
| 
								 | 
							
								                if (checkSize(size))
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    state = "文件大小超出网站限制";
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                //保存图片
							 | 
						||
| 
								 | 
							
								                if (state == "SUCCESS")
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    filename = reName();
							 | 
						||
| 
								 | 
							
								                    uploadFile.SaveAs(uploadpath + filename);
							 | 
						||
| 
								 | 
							
								                    URL =  pathbase + filename;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            catch (Exception)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                state = "未知错误";
							 | 
						||
| 
								 | 
							
								                URL = "";
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return getUploadInfo();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								     * 上传涂鸦的主处理方法
							 | 
						||
| 
								 | 
							
								      * @param HttpContext
							 | 
						||
| 
								 | 
							
								      * @param string
							 | 
						||
| 
								 | 
							
								      * @param  string[]
							 | 
						||
| 
								 | 
							
								      *@param string
							 | 
						||
| 
								 | 
							
								      * @return Hashtable
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								        public Hashtable upScrawl(HttpContext cxt, string pathbase, string tmppath, string base64Data)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            pathbase = pathbase + DateTime.Now.ToString("yyyy-MM-dd") + "/";
							 | 
						||
| 
								 | 
							
								            uploadpath = cxt.Server.MapPath(pathbase);//获取文件上传路径
							 | 
						||
| 
								 | 
							
								            FileStream fs = null;
							 | 
						||
| 
								 | 
							
								            try
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                //创建目录
							 | 
						||
| 
								 | 
							
								                createFolder();
							 | 
						||
| 
								 | 
							
								                //生成图片
							 | 
						||
| 
								 | 
							
								                filename = System.Guid.NewGuid() + ".png";
							 | 
						||
| 
								 | 
							
								                fs = File.Create(uploadpath + filename);
							 | 
						||
| 
								 | 
							
								                byte[] bytes = Convert.FromBase64String(base64Data);
							 | 
						||
| 
								 | 
							
								                fs.Write(bytes, 0, bytes.Length);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                URL = pathbase + filename;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            catch (Exception)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                state = "未知错误";
							 | 
						||
| 
								 | 
							
								                URL = "";
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            finally
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                fs.Close();
							 | 
						||
| 
								 | 
							
								                deleteFolder(cxt.Server.MapPath(tmppath));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return getUploadInfo();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								    * 获取文件信息
							 | 
						||
| 
								 | 
							
								    * @param context
							 | 
						||
| 
								 | 
							
								    * @param string
							 | 
						||
| 
								 | 
							
								    * @return string
							 | 
						||
| 
								 | 
							
								    */
							 | 
						||
| 
								 | 
							
								        public string getOtherInfo(HttpContext cxt, string field)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            string info = null;
							 | 
						||
| 
								 | 
							
								            if (cxt.Request.Form[field] != null && !String.IsNullOrEmpty(cxt.Request.Form[field]))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                info = field == "fileName" ? cxt.Request.Form[field].Split(',')[1] : cxt.Request.Form[field];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return info;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * 获取上传信息
							 | 
						||
| 
								 | 
							
								         * @return Hashtable
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        private Hashtable getUploadInfo()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            Hashtable infoList = new Hashtable();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            infoList.Add("state", state);
							 | 
						||
| 
								 | 
							
								            infoList.Add("url", URL);
							 | 
						||
| 
								 | 
							
								            infoList.Add("originalName", originalName);
							 | 
						||
| 
								 | 
							
								            infoList.Add("name", Path.GetFileName(URL));
							 | 
						||
| 
								 | 
							
								            infoList.Add("size", uploadFile.ContentLength);
							 | 
						||
| 
								 | 
							
								            infoList.Add("type", Path.GetExtension(originalName));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return infoList;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * 重命名文件
							 | 
						||
| 
								 | 
							
								         * @return string
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        private string reName()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return System.Guid.NewGuid() + getFileExt();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * 文件类型检测
							 | 
						||
| 
								 | 
							
								         * @return bool
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        private bool checkType(string[] filetype)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            currentType = getFileExt();
							 | 
						||
| 
								 | 
							
								            return Array.IndexOf(filetype, currentType) == -1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * 文件大小检测
							 | 
						||
| 
								 | 
							
								         * @param int
							 | 
						||
| 
								 | 
							
								         * @return bool
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        private bool checkSize(int size)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            return uploadFile.ContentLength >= (size * 1024 * 1024);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * 获取文件扩展名
							 | 
						||
| 
								 | 
							
								         * @return string
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        private string getFileExt()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            string[] temp = uploadFile.FileName.Split('.');
							 | 
						||
| 
								 | 
							
								            return "." + temp[temp.Length - 1].ToLower();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * 按照日期自动创建存储文件夹
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        private void createFolder()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (!Directory.Exists(uploadpath))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                Directory.CreateDirectory(uploadpath);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /**
							 | 
						||
| 
								 | 
							
								         * 删除存储文件夹
							 | 
						||
| 
								 | 
							
								         * @param string
							 | 
						||
| 
								 | 
							
								         */
							 | 
						||
| 
								 | 
							
								        public void deleteFolder(string path)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            //if (Directory.Exists(path))
							 | 
						||
| 
								 | 
							
								            //{
							 | 
						||
| 
								 | 
							
								            //    Directory.Delete(path, true);
							 | 
						||
| 
								 | 
							
								            //}
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |