ASP.NET MVC中使用uploadify上传图片并按照规定大小压缩图片

 $(document).ready(function () {
            $(‘#uploadify‘).uploadify({
                onUploadSuccess: function (file, returndata, response) {
                    var data = eval(‘(‘ + returndata + ‘)‘);
                    if (response == true && data.Success == ‘true‘) {
                        $("input[name=BACKIMG]").attr("value", data.FileName);//data.FileName为图片保存路径
                        $(‘#mainForm‘).submit();
                    } else {
                        alert(data.Message);
                    }
                },
                ‘height‘: 20,
                ‘width‘: 35,
                ‘uploadLimit‘: 1,
                ‘queueSizeLimit‘: 1,
                ‘queueID‘: ‘fileQueue‘,
                ‘removeCompleted‘: false,
                ‘auto‘: false,
                ‘multi‘: false,
                ‘buttonText‘: ‘浏览图片‘,
                ‘swf‘: ‘@Url.Content("~/Scripts/uploadify/uploadify.swf")‘,
                ‘uploader‘: ‘@Url.Content("~/Scripts/uploadify/UploadAttach.ashx")‘
            });

将图片上传到服务器的方法为UploadAttach.ashx

 /// <summary>
    /// UploadAttach 的摘要说明
    /// </summary>
    public class UploadAttach : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            HttpPostedFile fileData = context.Request.Files["fileData"];
            string floder = context.Request["floder"];
            if (fileData != null)
            {
                try
                {
                    // 文件上传后的保存路径
                    string path = "~/img/";
                    string filePath = context.Server.MapPath(path);
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    string saveFileName = Guid.NewGuid().ToString() + fileData.FileName;

                    string newFilePath = filePath + saveFileName;
                    fileData.SaveAs(newFilePath);

                    //图片裁切
                    var thumbFilePath = newFilePath.Replace(Path.GetExtension(newFilePath),
                                                            ".thumb" + Path.GetExtension(newFilePath));
                    ImageKit.MakeCenterThumbnail(newFilePath, thumbFilePath, 1602, 400);
                    if (File.Exists(newFilePath))
                    {
                        File.Delete(newFilePath);
                    }
                    context.Response.Write("{‘Success‘:‘true‘,‘FileName‘:‘" + saveFileName.Replace(".", ".thumb.") + "‘}");
                }
                catch (Exception ex)
                {
                    context.Response.Write("{‘Success‘:‘false‘,‘Message‘:‘"+ex.Message+"‘}");
                }
            }
            else
            {
                context.Response.Write("{‘Success‘:‘false‘,‘Message‘:‘请选择要上传的文件‘}");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

图片裁剪压缩的方法

 public static class ImageKit
    {
          public static bool MakeCenterThumbnail(string origPath, string destPath, int width, int height)
        {
            try
            {
                using (Image image = Image.FromFile(origPath))
                {
                    int originalWidth = image.Width;
                    int originalHeight = image.Height;
                    double ratio = Math.Max((originalWidth / (double)width < originalHeight / (double)height)
                                        ? originalWidth / (double)width
                                        : originalHeight / (double)height, 1);

                    var cutSize = new Size((int)Math.Round(width * ratio, 0), (int)Math.Round(height * ratio, 0));

                    int x = (int)Math.Round((double)(originalWidth - cutSize.Width) / 2, 0);
                    int y = (int)Math.Round((double)(originalHeight - cutSize.Height) / 2, 0); ;

                    var bitmap = new Bitmap(width, height);
                    using (var graphics = Graphics.FromImage(bitmap))
                    {
                        graphics.CompositingQuality = CompositingQuality.HighQuality;
                        graphics.SmoothingMode = SmoothingMode.HighQuality;
                        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        graphics.Clear(Color.White);

                        var destRect = new Rectangle(0, 0, width, height);
                        var originalRect = new Rectangle(x, y, cutSize.Width, cutSize.Height);
                        graphics.DrawImage(image, destRect, originalRect, GraphicsUnit.Pixel);
                    }
                    #region wjy20131004修改
                    // 以下代码为保存图片时,设置压缩质量
                    EncoderParameters encoderParams = new EncoderParameters();
                    long[] quality = new long[1];
                    quality[0] = 100;
                    EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
                    encoderParams.Param[0] = encoderParam;
                    //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象.
                    ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                    ImageCodecInfo jpegICI = null;
                    for (int i = 0;i < arrayICI.Length;i++)
                    {
                        if (arrayICI[i].FormatDescription.Equals("JPEG"))
                        {
                            jpegICI = arrayICI[i];
                            //设置JPEG编码
                            break;
                        }
                    }
                    if (jpegICI != null)
                    {
                        bitmap.Save(destPath, jpegICI, encoderParams);
                    }

                    //bitmap.Save(destPath);
                    #endregion
                }
                return true;
            }
            catch
            {
                return false;
            }
        }
    }

使用方法:

1,首先要添加JS引用

<script src="../../Scripts/uploadify/v3.1/jquery.uploadify-3.1.min.js" type="text/javascript"></script>
<link href="../../Scripts/uploadify/v3.1/uploadify1.css" rel="stylesheet" type="text/css" />

2,在页面中显示上传附件的按钮:

<div id="fileQueue">
</div>
<input type="file" name="uploadify" id="uploadify" />
<input type="hidden" name="BACKIMG" value=""/>

注意:隐藏控件BACKIMG是上传文件的路径,文件上传成功后要给它赋值,这样在表单提交成功后才可以根据图片路径读取到上传图片

3,如下所示Form表单

<form id="mainForm" method="post" action=‘@Url.Action(Model.Action)‘> </form>

提交时调用上传图片的方法

 function submitbut() {
            var filecount = $(‘#fileQueue‘).find(‘div‘).length;
            if (filecount > 0) {
                $(‘#uploadify‘).uploadify(‘upload‘, ‘*‘);
            } else {
                $(‘#mainForm‘).submit();
            }
        }
时间: 2024-10-14 14:37:47

ASP.NET MVC中使用uploadify上传图片并按照规定大小压缩图片的相关文章

log4net 使用总结- (2)在ASP.NET MVC 中使用

log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二.在站点根目录下增加log4net.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="

ASP.NET MVC中使用异步控制器

线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个版本,才能趋于规范. ASP.NET MVC 中为什么需要使用异步呢,IIS有一个线程池来处理用户的请求,当一个新的请求过来时,将调度池中的线程以处理该请求,然而,但并发量很高的情况下,池中的线程已经不能够满足这么多的请求时候,池中的每一个线程都处于忙的状态则在处理请求时将阻塞处理请求的线程,并且该

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用ASP.NE

ASP.NET MVC中使用FluentValidation验证实体

1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的验证方式,同时FluentValidation还提供了表达式链式语法. 2.安装FluentValidation FluentValidation地址:http://fluentvalidation.codeplex.com/ 使用Visual Studio的管理NuGet程序包安装FluentVa

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  2.关于任务跟踪管理系统项目中遇到的Windows服务以及Webservice的综合应用的问题. 大家好这是我第二次写博客 ,写的不好请大家多多谅解, 希望大家可以多多指正. 二:我稍微的整理了一下关于这个分布式定时器需求:1.根据任务跟踪管理系统中的数据库的AnswerSheet 表格中找到客户编

Asp.Net MVC中DropDownListFor的用法(转)

2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T  List<T>的第一个,最后一个不就是M吗? @Html.DropDownListFor(model=>model.First().Title, ViewData["Title"] as List<SelectListItem>, "标题", @"dropdown

ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败

在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加在Model里面.) 第一步:引用下面这个命名空间 第二步:添加验证 第三步:启动调试,出现以下问题: 解决方法: 超链接中包含了解决这个问题的详细介绍,也就是通过Code First数据库迁移的方式让Entity Framework帮助我们自动调整数据库里面的架构. 解决这个问题最简单的方法就是将

关于asp.net MVC 中的TryUpdateModel方法

有比较才会有收货,有需求才会发现更多. 在传统的WebFormk开发工作中,我们常常会存在如下的代码块 //保存 protected void btnSubmit_Click(object sender, EventArgs e) { try { BLL.MoneyBll cun = new BLL.MoneyBll(); Model.Money m1 = new Model.Money(); m1.Commany = int.Parse(this.Commany.Text); m1.Count

在asp.net mvc中使用PartialView返回部分HTML段

问题链接: MVC怎样实现异步调用输出HTML页面 该问题是个常见的 case, 故写篇文章用于提示新人. 在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同一时候它还有个兄弟PartialViewResult 相信聪明的你已经知道了它俩的差别了,没错 一个用于返回总体,还有一个返回局部(部分). 如果我有这样一个需求,输入username,然后返回相关信息.之前的做法可能会是用json格式来返回用户的相关信息,然后到页面去渲染相关 的