zoukankan      html  css  js  c++  java
  • jQuery uploadify在谷歌和火狐浏览器下无法上传

    原因:

    由于jQuery uploadify是借助flash来实现上传的,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器。但firefox、chrome不会这样做,他们会认为这样不安全。哈,这就是原因。——摘自http://www.cnblogs.com/mbailing/archive/2011/03/30/uploadify.html

    我是这样解决的,这样所有上传文件的代码都不需要修改,改动量最小,但是有安全隐患:

    if (this.LoginInfo == null)
    {
        // 解决uploadify兼容火狐谷歌浏览器上传问题
        // 但是,此代码使系统有安全隐患,Flash程序请求该系统不需要验证
        // 要解决此安全隐患,需要Flash程序传用户名和密码过来验证,但是该用户名和密码不能写在前端以便被不法用户看到
        if (Request.UserAgent == "Shockwave Flash")
        {
            return;
        }
        else
        {
            filterContext.Result = RedirectToAction("LoginAgain", "Account", new { Area = "Auth" });
            return;
        }
    }
    View Code

    我们的系统是ASP.NET MVC的,虽说通过加密的方式可以让用户看不到敏感信息,但恶意用户不需要把敏感信息解密出来就可绕过系统验证。

    验证信息不能直接写前台,可以用ajax从后台获取验证信息,然后传给flash,然后在拦截器中验证。

    修改后:

    JS代码:

    ajax请求后台获取用户名,传给flash

    $(function () {
        $.ajax({
            url: "/Auth/Account/GetUserNamePwd",
            type: "POST",
            dataType: "json",
            data: {},
            success: function (data) {
                $("#uploadify").uploadify({
                    height: 25,
                     100,
                    swf: '/Content/Plugins/UploadifyJs/uploadify.swf',
                    uploader: 'UploadFile',
                    formData: {
                        userName: data.data.userName,  //ajax获取的用户名
                        pwd: data.data.pwd  //ajax获取的密码
                    },
                    buttonText: '选择文件上传',
                    fileSizeLimit: '4MB',
                    fileTypeDesc: '文件',
                    fileTypeExts: '*.*',
                    queueID: 'fileQueue',
                    multi: true,
                    onUploadSuccess: function (fileObj, data, response) {
                        var d = eval("(" + data + ")");
                        $(".uploadify-queue-item").find(".data").html("  上传完成");
                        $("#url").val(d.url);
                        $("#name").val(d.name);
                    },
                    onUploadError: function (event, ID, fileObj, errorObj) {
                        if (event.size > 4 * 1024 * 1024) {
                            alert('超过文件上传大小限制(4M)!');
                            return;
                        }
                        alert('上传失败');
                    }
                }); //end uploadify
            }
        });
    });       //end $
    View Code

    拦截器中代码:

    ......
    if (this.LoginInfo == null)
    { 
        // 解决uploadify兼容火狐谷歌浏览器上传问题
        // 但是,此代码使系统有安全隐患,Flash程序请求该系统不需要验证
        // 要解决此安全隐患,需要Flash程序传用户名和密码过来验证,但是该用户名和密码不能写在前端以便被不法用户看到
        if (Request.UserAgent == "Shockwave Flash")
        {
            string userName = Request.Params["userName"];
            string pwd = Request.Params["pwd"];
            if (!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(pwd))
            {
                AuthDAL authDAL = new AuthDAL();
                sys_user user = authDAL.GetUserInfoByName(userName);
                if (user != null && user.password == pwd)
                {
                    return;
                }
            }
        }
        else
        {
            filterContext.Result = RedirectToAction("LoginAgain", "Account", new { Area = "Auth" });
            return;
        }
    }
    ......
    View Code
  • 相关阅读:
    2018年第九届蓝桥杯国赛总结(JavaB组)
    yzm10的小简介
    论文学习笔记
    Tied Block Convolution:一种共享filter的卷积形态
    AI艺术鉴赏挑战赛
    论文学习笔记
    (转)论文学习笔记
    论文学习笔记
    2020 计蒜之道 预赛 第三场 石子游戏(简单)(暴力DP)
    第六周:生成式对抗网络
  • 原文地址:https://www.cnblogs.com/s0611163/p/4702277.html
Copyright © 2011-2022 走看看