兼容IE的头像上传插件的设计方法(asp.net mvc)

  使用了两个插件

1.文件上传插件uploadify

2.图像编辑插件jquery.Jcrop

基于Asp.net的mvc设计模式,设计了该插件

下面贴代码:

view(.cshtml):

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <link href="~/Bootstrap/jquery.Jcrop.min.css" rel="stylesheet" />
    <link href="~/Bootstrap/uploadify.css" rel="stylesheet" />

    @{
        ViewBag.Title = "上传头像";
    }
</head>

<div class="content animate-panel">
    <div class="row">
        <div class="col-lg-12">
            <div class="hpanel">
                <div class="panel-heading">
                    修改头像
                </div>
                <div class="panel-body">
                    <img id="img-uploadify" src=‘~/Res/@(User.Identity.Name)Portrait.jpg‘ class="center-block">
                    <div id="img-up" class="pull-left">
                        <input type="file" id="uploadify" name="uploadify" />
                        <div id="fileQueue">
                        </div>
                    </div>
                    <div id="img-crop" class="pull-right ">
                        @*<div id="img-prev-container">
                            <img class="img-circle m-b " id="img-preview" />
                             </div>*@

                        <div>
                            <form action="/Account/tryCrop" method="post" onsubmit="return checkCoords()">
                                <input type="hidden" name="x" id="x" />
                                <input type="hidden" name="y" id="y" />
                                <input type="hidden" name="w" id="w" />
                                <input type="hidden" name="h" id="h" />
                                <input type="hidden" name="img" id="img" />
                                <input type="submit" value="保存为头像" class="btn btn-success" />
                            </form>
                        </div>
                    </div>

                </div>
            </div>
        </div>
    </div>
</div>

@section Scripts {
    <script src="~/Bootstrap/jquery.uploadify.js"></script>
    <script src="~/Bootstrap/jquery.Jcrop.min.js"></script>

    <script>z`
        var boundx;
        var boundy;

        function updateCoords(c) {
            $(‘#x‘).val(c.x);
            $(‘#y‘).val(c.y);
            $(‘#w‘).val(c.w);
            $(‘#h‘).val(c.h);
        };

        function checkCoords() {
            if (parseInt($(‘#w‘).val())) {
                return true;
            };
            alert(‘请先选择要裁剪的区域后,再提交。‘);
            return false;
        };

        function updatePreview(c) {
            if (parseInt(c.w) > 0) {
                /* 商必须与img-preview宽高一致 */
                c.w;
                c.h;

                $(‘#img-preview‘).css({
                    width: ‘96px‘,
                    height: ‘96px‘,

                });
            }
        };

        $("#uploadify").uploadify({

            ‘swf‘: ‘/Bootstrap/uploadify.swf‘,
            ‘uploader‘: ‘/Account/Upload‘, //图片上传的action方法
            ‘buttonClass‘: ‘btn btn-success ‘,
            ‘folder‘: ‘Images‘,
            ‘queueID‘: ‘fileQueue‘,
            ‘auto‘: true,
            ‘buttonText‘: ‘上传图片‘,
            ‘queueSizeLimit‘: 1,
            ‘multi‘: false,

            ‘fileTypeDesc‘: ‘jpg,png‘,
            ‘fileTypeExts‘: ‘*.jpg;*.png‘,
            ‘fileSizeLimit‘: ‘1MB‘,
            ‘onUploadSuccess‘: function (file, data, response) {
                var result = eval(‘(‘ + data + ‘)‘);
                if (‘0‘ == result.id) {

                    $(‘#img-crop‘).css("display", "block");
                    /* 绑定图片名称 */
                    var iname = (result.mess).substring((result.mess).lastIndexOf("/") + 1, (result.mess).length);
                    $(‘#img‘).val(result.mess);
                    /* 加载原始图片 */
                    $(‘#img-preview,#img-uploadify‘).attr("src", result.mess);
                    /* 加载剪裁插件 */
                    $(‘#img-uploadify‘).Jcrop({
                        onChange: updatePreview,
                        onSelect: updatePreview,
                        aspectRatio: 1,
                        onSelect: updateCoords,
                        setSelect: [0, 0, 100, 100]
                    }, function () {
                        var bounds = this.getBounds();
                        boundx = bounds[0];
                        boundy = bounds[1];
                        jcrop_api = this;
                    });
                } else if (‘1‘ == result.id) {
                    /* 异常信息提示 */
                    alert(result.mess)
                }
            }
        });

    </script>
}
<style>

    .jcrop-holder {
        display: block;
        margin-right: auto;
        margin-left: auto;
    }
</style>

  controller:

  public ActionResult UploadPortrait()
        {

            return View();
        }
   [HttpPost]
        public ActionResult upload(HttpPostedFileBase Filedata)
        {
            try
            {
                Image image = Image.FromStream(Filedata.InputStream);
                string ipath = Path.Combine("Images", Path.GetFileName(Filedata.FileName));
                string spath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, ipath);
                image.Save(spath);

                return Json(new { id = "0", mess = string.Format("{0}{1}/{2}", BaseUrl, "Images", Filedata.FileName), iw = image.Width, ih = image.Height });
            }
            catch (Exception ex)
            {
                return Json(new { id = "1", mess = ex.Message });
            }
        }
        public ActionResult tryCrop(string img, int x, int y, int w, int h)
        {
            var imgPath = img.Split(‘/‘);
            Image image = Image.FromFile(Path.Combine(HttpContext.Server.MapPath("~"), "Images", imgPath[imgPath.Count() - 1]));
            Crop(image, w, h, x, y).Save(Path.Combine(HttpContext.Server.MapPath("~"), "Res", User.Identity.Name + "Portrait.jpg"));
            return RedirectToAction("Example", "Account");

        }

        public string BaseUrl
        {
            get
            {
                return Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd(‘/‘) + ‘/‘;
            }
        }

        [NonAction]
        public static Image Crop(Image image, int width, int height, int x, int y)
        {
            Bitmap bmp = new Bitmap(96, 96, PixelFormat.Format24bppRgb);
            bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);

            using (Graphics graphic = Graphics.FromImage(bmp))
            {
                graphic.SmoothingMode = SmoothingMode.AntiAlias;
                graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
                graphic.DrawImage(image, new Rectangle(0, 0, 96, 96), x, y, width, height, GraphicsUnit.Pixel);
            }

            return bmp;
        }

  

时间: 2024-10-12 21:29:24

兼容IE的头像上传插件的设计方法(asp.net mvc)的相关文章

头像上传插件

上传头都是比较复杂的一件事,最近帮朋友找了一款插件给大家分享一下. ps:这个可以根据你的设计稿自由发挥 可以写成各种样式,不会再有固定插件的样式: 演示地址:http://durenlong.gitee.io/uploading 码云地址:https://gitee.com/durenlong/uploading ps:关键标签只有四个只要四个对应就ok,然后你就可以随意做出你想要的样子 <!DOCTYPE html> <html> <head> <meta c

详解jQuery uploadify文件上传插件的使用方法

uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能. 现在最新版为3.2.1. 在线实例 实例中用到的php文件UploaderDemo.php请在页面下方下载 引入文件 <link rel="stylesheet" type="text/css" href="uploadify.css" /> <script type="text/javascript

jquery.uploadify上传文件配置详解(asp.net mvc)

页面源码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jquery upload上传文件(asp.net mvc)配置</title> <script src="Resources/jquery.js"

http遇到的那些坑,iis上传文件报413错误 asp.net MVC

话不多说,直接上解决方法. 修改配置文件  applicationHost.config  具体地址在C:\Windows\System32\inetsrv\config 按照下面的节点进行 添加<serverRuntime uploadReadAheadSize="10485760" />  10MB大小 具体节点如下: <location> <system.webServer> <serverRuntime uploadReadAheadS

移动端web头像上传实现截取和照片方向修复

实战所需js包: jQuery.Jcrop.EXIF 本次实战功能是在 app 中的 我的客户 的客户信息页面中实现移动端web的头像上传,本次没有实现图像拖拽.缩放的触摸事件功能(Jcrop在这方面的扩展支持实在不够良好,弄了半天没弄出来),若后续有更好的移动端web头像上传插件,可考虑后续替代升级. demo主要实现的关键功能: 图像的方向修正及图像截取 虽然没有实现图像拖拽和双指缩放,但其缩放后的相对于图像的比例计算和拖拽坐标计算规则是一致的,可以参考.同时图像的旋转功能也可参考其中的核心

jQuery上传插件Uploadify出现Http Error 302错误解决

前段时间介绍过jquery uploadify上传插件的使用方法,我在使用中遇到过Http Error 302错误问题,应该会有很多人在使用中遇到过,在此记录下来: 首 先http 302是请求被重定向的意思,这就很容易理解了,如果你的uploadify处理上传脚本有session验证,就会出现此错误,因为flash在执行 post请求的时候没有包含cookie信息,而服务器的session会根据客户端的cookie来得到SESSIONID.没有提交cookie自然 就不能获取到session,

PHP+ajaxfileupload与jcrop插件结合 完成头像上传

昨天花了点时间整合了一下头像插件 东拼西凑的成果 先来看下效果 1.先使用ajaxfileupload插件做异步上传.这个地方我本来想做个上传进度的效果,但技术有限失败了.上传按钮我还做了一个文件大小的限制,但是由于浏览器兼容性的问题,不完美在IE6--IE9之间还有很多问题需要解决 getFileSize函数是用于判断文件大小的函数 function getFileSize(fileName) { var byteSize = 0; //console.log($("#" + fil

【分享】兼容ie6-9和现代浏览器以及ios,android,pad等触屏设备的异步文件上传插件

核心代码 /** * 该插件用于兼容ie6-7-8-9及现代浏览器的异步上传文件. * 请注意,在ie6-7-8-9上面的原理是: * 新添加一个表单和一个iframe,然后每次选择都将file输入框复制到该表单上面,然后submit整个表单,这样就可以实现类似ajax提交文件的效果, * 但是有一点是没办法处理的,就是在客户端预览图片及判断文件大小.现代浏览器则可以. */ var AjaxFileInput=function(opts){ var settings={ container:"

前端插件——头像截图上传插件的使用(带后台)

效果图:实现上传头像,右边是预览,有三个大小,可以对头像进行裁剪 HTML: toParentData 和 img 返回的是图片裁剪后的base64编码.其中toParentData用于业务需求,可以忽略. <!DOCTYPE html> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <c:set va