服务器端上传功能的一般处理程序,支持远程提交上传

public class cl_file_upload : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Charset = "UTF-8";
        UploadFileResult result = new UploadFileResult();
        string savePath = "/attem";
        string dirPath = context.Server.MapPath(savePath);
        HttpPostedFile PostedFile = context.Request.Files[0];
        // 读取原始文件名
        string LocalName = PostedFile.FileName;
        // 初始化byte长度.
        byte[] File = new Byte[PostedFile.ContentLength];
        // 转换为byte类型
        System.IO.Stream stream = PostedFile.InputStream;
        string filename, error;

        if (CheckFile(File, "jpg,jpeg,gif,png,doc,docx,xls,xlsx,ppt,pptx,pdf", LocalName, 4097152, "1", out error, out filename))
        {
            string path = dirPath + @"" + filename;
            context.Request.Files[0].SaveAs(path);
            result.result = 1;
            result.url = savePath + "/" + filename;
            result.localname = jsonString(LocalName);
        }
        else
        {
            result.result = 0;
            result.error = error;
        }
        context.Response.Write(JsonHelp.ObjToJsonStr(result));
    }

    string jsonString(string str)
    {
        str = str.Replace("\", "\\");
        str = str.Replace("/", "\/");
        str = str.Replace("'", "\'");
        return str;
    }


    string GetFileExt(string FullPath)
    {
        if (FullPath != "") return FullPath.Substring(FullPath.LastIndexOf('.') + 1).ToLower();
        else return "";
    }

    void CreateFolder(string FolderPath)
    {
        if (!System.IO.Directory.Exists(FolderPath)) System.IO.Directory.CreateDirectory(FolderPath);
    }

    /// <summary>
    /// 检测上传文件的有效性
    /// </summary>
    /// <param name="file">文件</param>
    /// <param name="file_ext">允许上传的扩展名</param>
    /// <param name="localname">本地文件名称,带扩展名</param>
    /// <param name="max_size">允许上传文件最大大小</param>
    /// <param name="error">错误信息</param>
    /// <param name="filename">最终生成的文件名</param>
    /// <returns></returns>
    bool CheckFile(byte[] file, string file_ext, string localname, int max_size, string CreateFileNameType, out string error, out string filename)
    {
        error = "";
        filename = "";
        if (file.Length == 0)
        {
            error = "无数据提交";
            return false;
        }

        if (file.Length > max_size)
        {
            error = "文件大小超过" + max_size + "字节";
            return false;
        }

        // 取上载文件后缀名
        string extension = GetFileExt(localname);
        if (("," + file_ext + ",").IndexOf("," + extension + ",") < 0)
        {
            error = "上传文件扩展名必需为:" + file_ext;
            return false;
        }
        if (CreateFileNameType == "1")
        {
            Random random = new Random(DateTime.Now.Millisecond);
            filename = DateTime.Now.ToString("yyyyMMddhhmmss") + random.Next(10000) + "." + extension;
        }
        else
        {
            filename = localname;
        }
        return true;

    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="create_originalImageName">是否保存原图</param>
    /// <param name="originalImage">原图</param>
    /// <param name="imageServerRootDirectory">保存根目录</param>
    /// <param name="imageSubDirectory">图片目录</param>
    /// <param name="originalImageName">原图新名称</param>
    /// <param name="thumbnailName_small">缩略小图名称</param>
    /// <param name="maxSize_small">缩略小图最大尺寸</param>
    /// <param name="thumbnailName_big">缩略小图名称</param>
    /// <param name="maxSize_big">缩略大图最大尺寸</param>
    /// <returns></returns>
    protected bool Make_thumbnail_Image_big_small(bool create_originalImageName, System.Drawing.Image originalImage, string imageServerRootDirectory, string imageSubDirectory, string originalImageName, string thumbnailName_small, int maxSize_small, string thumbnailName_big, int maxSize_big)
    {
        string thumbnailPath = imageServerRootDirectory + "\" + imageSubDirectory + "\" + thumbnailName_big;
        string originalImagePath = imageServerRootDirectory + "\" + imageSubDirectory + "\" + originalImageName;

        int x = 0;
        int y = 0;
        int ow = originalImage.Width;
        int oh = originalImage.Height;
        int towidth = 0;
        int toheight = 0;

        if (ow < maxSize_big && oh < maxSize_big)
        {
            towidth = ow;
            toheight = oh;
        }
        else
        {
            #region 计算比例
            if (ow > oh) // 宽 比 高    大
            {
                decimal YuanShiBiLi = (decimal)oh / (decimal)ow;
                towidth = (ow > maxSize_big) ? maxSize_big : ow;
                toheight = (int)(YuanShiBiLi * towidth);
            }
            else
            {
                decimal BiLi = (decimal)ow / (decimal)oh;
                toheight = (oh > maxSize_big) ? maxSize_big : oh;
                towidth = (int)(toheight * BiLi);
            }
            #endregion
        }


        #region  大图

        //新建一个bmp图片  
        System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
        //新建一个画板  
        System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
        //设置高质量插值法  
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        //设置高质量,低速度呈现平滑程度  
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;

        //清空画布并以透明背景色填充  
        g.Clear(System.Drawing.Color.Transparent);
        g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),//在指定位置并且按指定大小绘制原图片的指定部分  
            new System.Drawing.Rectangle(x, y, ow, oh),
            System.Drawing.GraphicsUnit.Pixel);
        try
        {
            bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);  //以jpg格式保存缩略图  
        }
        catch (System.Exception e)
        {
            throw e;
        }
        #endregion

        if (thumbnailName_small.Length > 2)
        {
            #region small 小图
            {
                int x_small = 0;
                int y_small = 0;
                int ow_small = towidth;
                int oh_small = toheight;
                int towidth_small = 0;
                int toheight_small = 0;

                if (ow_small > oh_small)
                {
                    decimal bili_small = (decimal)oh_small / (decimal)ow_small;
                    towidth_small = (ow_small > maxSize_small) ? maxSize_small : ow_small;
                    toheight_small = (int)(bili_small * towidth_small);
                }
                else
                {
                    decimal bili_small = (decimal)ow_small / (decimal)oh_small;
                    toheight_small = (oh_small > maxSize_small) ? maxSize_small : oh_small;
                    towidth_small = (int)(bili_small * toheight_small);
                }

                //新建一个bmp图片  
                System.Drawing.Image bitmap_small = new System.Drawing.Bitmap(towidth_small, toheight_small);
                //新建一个画板  
                System.Drawing.Graphics g_small = System.Drawing.Graphics.FromImage(bitmap_small);
                //设置高质量插值法  
                g_small.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                //设置高质量,低速度呈现平滑程度  
                g_small.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;



                //清空画布并以透明背景色填充  
                g_small.Clear(System.Drawing.Color.Transparent);

                System.Drawing.Image originalImage_small = bitmap;
                g_small.DrawImage(originalImage_small, new System.Drawing.Rectangle(0, 0, towidth_small, toheight_small),//在指定位置并且按指定大小绘制原图片的指定部分  
                  new System.Drawing.Rectangle(x_small, y_small, ow_small, oh_small),
                  System.Drawing.GraphicsUnit.Pixel);
                string thumbnailPath_small = imageServerRootDirectory + "\" + imageSubDirectory + "\" + thumbnailName_small;
                try
                {
                    bitmap_small.Save(thumbnailPath_small, System.Drawing.Imaging.ImageFormat.Jpeg);  //以jpg格式保存缩略图  
                }
                catch (System.Exception e)
                {
                    throw e;
                }
                finally
                {
                    originalImage_small.Dispose();
                    bitmap_small.Dispose();
                    g_small.Dispose();
                }
            }
            #endregion
        }
        if (create_originalImageName == true)
        {
            originalImage.Save(originalImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
        }

        try
        {
            originalImage.Dispose();
            bitmap.Dispose();
            g.Dispose();
        }
        catch (Exception ex)
        {
        }
        return true;
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}
原文地址:https://www.cnblogs.com/JackQ/p/4256249.html