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

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;
        }
    }

}
时间: 2024-10-11 16:41:57

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

Dropzone批量上传ASP.NET版,支持MVC+一般处理程序,可提交上传。

Dropzone的JS文件需要自己到官网下载下  http://www.dropzonejs.com/,上面也有demo及API, 官网上的 demo是MVC版的并且自动上传的,这里给修改成点击按钮提交上传,也给改成支持一般处理程序了,由于项目需要..没办法. 各种配置属性这里不一一介绍了,应该都能看懂官网上也有说明,需要改的小伙伴自己查一下吧.不废话了直接上代码及Demo 前端代码 @{ Layout = null; } <!DOCTYPE html> <html> <he

达到HTTP合约Get、Post和文件上传功能——采用WinHttp介面

于<采用WinHttp实现HTTP协议Get.Post和文件上传功能>一文中,我已经比較具体地解说了怎样使用WinHttp接口实现各种协议. 在近期的代码梳理中,我认为Post和文件上传模块能够得到简化,于是差点儿重写了这两个功能的代码.由于Get.Post和文件上传功能的基础(父)类基本没有修改,函数调用的流程也基本没有变化,所以本文我将重点解说修改点. (转载请指明出于breaksoftware的csdn博客) 首先我改动了接口的字符集.之前我都是使用UNICODE作为接口參数类型,当中一

实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现

在<使用WinHttp接口实现HTTP协议Get.Post和文件上传功能>一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议.在最近的代码梳理中,我觉得Post和文件上传模块可以得到简化,于是几乎重写了这两个功能的代码.因为Get.Post和文件上传功能的基础(父)类基本没有改动,函数调用的流程也基本没有变化,所以本文我将重点讲解修改点.(转载请指明出于breaksoftware的csdn博客) 首先我修改了接口的字符集.之前我都是使用UNICODE作为接口参数类型,其中一个

基于bootstrap的上传插件fileinput实现ajax异步上传功能(支持多文件上传预览拖拽)

首先需要导入一些js和css文件 ? 1 2 3 4 5 6 <link href="__PUBLIC__/CSS/bootstrap.css" rel="external nofollow" rel="stylesheet"> <link type="text/css" rel="stylesheet" href="__PUBLIC__/CSS/fileinput.css&qu

FLASH图片上传功能—从百度编辑器UEditor里面提取出来

为了记录工作中碰到的各种问题,以及学习资料整理,今天开始,将以往的文章进行了一个整理,以后也开始认真的记录学习过程中的各种问题 在HTML里面的文件上传功能一直是个问题,为了实现上传文件大小限制,怎样显示进度条问题,以及上传前图片预览,也试过各种办法,直到有一天看到百度编辑器中的图片上传功能.花了点功夫把他单独提取出来. 最终效果图如下: 这个功能可以提供多个图片文件选择,预览,然后对上传的图片在上传队列中删除,以及旋转和,上传中进度条显示,以及上传相册的选择. 源代码下载路径为: http:/

文件/大文件上传功能实现(JS+PHP)全过程

文件/大文件上传功能实现(JS+PHP) 参考博文:掘金-橙红年代 前端大文件上传 路漫漫 其修远 PHP + JS 实现大文件分割上传 本文是学习文件上传后的学习总结文章,从无到有实现文件上传功能,前端小白写的代码不是最优,如果有错误的地方请多多指教,如果本文对你有所帮助,深感荣幸. 近期公司的项目中,涉及到上传大文件的问题,大文件上传用普通表单上传时出现的问题是,无法断点续存,一但中途中断上传,就要重头开始,这很明显不是我们想要的,所以经过一番查询,学习了一下大文件分割上传的方法.并且使用简

web大文件上传解决方案支持分片断点上传

一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输.关闭浏览器后保留进度信息. 支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端文件夹层级结构与本地相同. 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验:支持文件夹上传,文件夹中的文件数量达到1万个以上,且包含层级结构. 支持断点续传,关闭浏览器或刷新浏览

网页大文件上传解决方案支持分片断点上传

1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通过浏览器上传至服务器,做一层中转便可以实现,但当这份文件非常大到了10GB级别,我们就需要思考另一种形式的技术方案了,也就是本文要阐述的方案. 技术要求主要有以下几方面: 支持超大数据量.10G级别以上 稳定性:除网络异常情况100%成功 准确性:数据无丢失,读写准确性100% 效率:1G文件分钟级

jQuery插件之路(三)——文件上传(支持拖拽上传)

好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下,上传文件的时候需要利用的一些必要的知识. 首先我们要说的就是FileReader对象,这是一个HTML5提出的,专门用来异步的读取用户计算机上文件的对象,这里有详细的介绍.所以如果我们想要使用它,那么首先我们得先创建一个FileReader对象. var fr = new FileReader()