ajax上传图片 jquery插件 jquery.form.js 的方法 ajaxSubmit; AjaxForm与AjaxSubmit的差异

先引入脚本  这里最好是把jquery的脚本升级到1.7

<script src="js/jquery-1.7.js" type="text/javascript"></script>
    <script src="js/jquery.form.js" type="text/javascript"></script>

 

$("#btnUpload").click(function () {
               $("#mytype").val("updateuserinfo");
               alert("开始上传喽");
               $("#form1").ajaxSubmit({

                   dataType: 'json',
                   success: function (data) {
                       alert("上传成功");
                   },
                   error: function (xhr) {
                       alert("上传失败");
                   }
               });
           });

 

<form id="form1" action="handler/xxHandler.ashx" method="post" enctype="multipart/form-data">
        <table>
            <tr>
                <td>附件:</td>
                <td>
                    <input type="file" name="fileName" />
                    <input type="hidden" name="uid" />
                    </td>
            </tr>
            <tr>
                <td>:</td>
                <td>
                   <input type="button" id="btnUpload" value="点击上传"/> <input type="text" name="type" id="mytype"  /></td>
            </tr>
             
        </table>
 
    </form>

后台保存图片代码

public static string DoUpFile(HttpContext context, string id, int type)
        {
            bool isUpload = false;
            string returnFile = "";
            if (context.Request.Files.Count > 0)
            {
                HttpPostedFile file = context.Request.Files[0];
                string fileNameExt = file.FileName.Substring(file.FileName.LastIndexOf("."));
                if (fileNameExt.ToLower() != ".jpg" && fileNameExt.ToLower() != ".mp3" &&
                    fileNameExt.ToLower() != ".png" && fileNameExt.ToLower() != ".jpeg")
                {
                    //throw new Exception("文件格式错误,不能识别。");
                    throw new MessageJxtException(Message.文件格式错误上传失败);
                }

                string yearMonthDay = DateTime.Now.ToString("yyyMMdd");
                string filePath = "";

                string name = DateTime.Now.ToString("yyyyMMdd_HHmmssffff");
                switch (type)
                {
                    case 1: //头像
                        filePath = context.Server.MapPath(string.Format("data/{0}", type));
                        name = id;
                        break;
                    case 3: //通知图片
                    case 4: //聊天图片
                    case 5: //通知声音
                    case 6: //聊天声音
                        filePath = context.Server.MapPath(string.Format("data/{0}/{1}", type, yearMonthDay));
                        break;
                    default:
                        filePath = context.Server.MapPath(string.Format("data/{0}/{1}", type, yearMonthDay));
                        break;
                }

                if (!Directory.Exists(filePath))
                {
                    Directory.CreateDirectory(filePath);
                }
                string myFileName = name + fileNameExt.ToLower();
                string savePath = filePath + "\\" + myFileName;

                file.SaveAs(savePath);
                //如果是图片,生成缩略图
                if (fileNameExt.ToLower() == ".jpg" || fileNameExt.ToLower() == ".png" ||
                    fileNameExt.ToLower() == ".jpeg")
                {
                    //缩略图地址
                    string thumbnailName = filePath + "\\" + name + "_s" + fileNameExt.ToLower();
                    Thumbnail.CutForSquare(savePath, thumbnailName, 200, 70);
                }
                isUpload = true;
                returnFile = myFileName;

            }

}


保存缩略图(正方形裁剪)

/// <summary>  
        /// 正方型裁剪  
        /// 以图片中心为轴心,截取正方型,然后等比缩放  
        /// 用于头像处理  
        /// </summary>  
        /// <param name="postedFile">原图HttpPostedFile对象</param>  
        /// <param name="fileSaveUrl">缩略图存放地址</param>  
        /// <param name="side">指定的边长(正方型)</param>  
        /// <param name="quality">质量(范围0-100)</param>  
        public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality)
        {
            //创建目录  
            string dir = Path.GetDirectoryName(fileSaveUrl);
            if (!Directory.Exists(dir))
                Directory.CreateDirectory(dir);

            //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)  
            System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);

            //原图宽高均小于模版,不作处理,直接保存  
            if (initImage.Width <= side && initImage.Height <= side)
            {
                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else
            {
                //原始图片的宽、高  
                int initWidth = initImage.Width;
                int initHeight = initImage.Height;

                //非正方型先裁剪为正方型  
                if (initWidth != initHeight)
                {
                    //截图对象  
                    System.Drawing.Image pickedImage = null;
                    System.Drawing.Graphics pickedG = null;

                    //宽大于高的横图  
                    if (initWidth > initHeight)
                    {
                        //对象实例化  
                        pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);
                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);
                        //设置质量  
                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        //定位  
                        Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);
                        Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);
                        //画图  
                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
                        //重置宽  
                        initWidth = initHeight;
                    }
                    //高大于宽的竖图  
                    else
                    {
                        //对象实例化  
                        pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);
                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);
                        //设置质量  
                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        //定位  
                        Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);
                        Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);
                        //画图  
                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
                        //重置高  
                        initHeight = initWidth;
                    }

                    //将截图对象赋给原图  
                    initImage = (System.Drawing.Image)pickedImage.Clone();
                    //释放截图资源  
                    pickedG.Dispose();
                    pickedImage.Dispose();
                }

                //缩略图对象  
                System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);
                System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);
                //设置质量  
                resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //用指定背景色清空画布  
                resultG.Clear(Color.White);
                //绘制缩略图  
                resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);

                //关键质量控制  
                //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff  
                ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo ici = null;
                foreach (ImageCodecInfo i in icis)
                {
                    if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")
                    {
                        ici = i;
                    }
                }
                EncoderParameters ep = new EncoderParameters(1);
                ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);

                //保存缩略图  
                resultImage.Save(fileSaveUrl, ici, ep);

                //释放关键质量控制所用资源  
                ep.Dispose();

                //释放缩略图资源  
                resultG.Dispose();
                resultImage.Dispose();

                //释放原始图片资源  
                initImage.Dispose();
            }
        }


比较完整的参考资料(上传图片,删除图片,带上传进度条显示

http://www.cnblogs.com/cysolo/archive/2013/06/09/3129119.html


最后,我们说一下 AjaxForm与AjaxSubmit的差异

AjaxForm 是用来对表单进行验证,例如提交一个用户名过去看看是否符合规定等等

AjaxSubmit 则是将整个表单都用ajax的方式进行了提交,包括图片都可以提交过去。

posted @ 2013-12-13 09:43  梨花驿路  阅读(1708)  评论(0编辑  收藏  举报