JQuery文件上传插件uploadify在MVC中Session丢失的解决方案
<script type="text/javascript">
    var auth = "@(Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value)";
    var ASPSESSID = "@Session.SessionID";
    $(function () {
        $("#file_upload").uploadify({
            swf: '/Scripts/uploadify/uploadify.swf',
            uploader: '/Project/File/FileUpload',
            formData: { ASPSESSID: ASPSESSID, AUTHID: auth },
            auto: true,
            …
     });
注意:上面灰底代码很重要!
将下面代码放入Global.asax
protected void Application_BeginRequest(object sender, EventArgs e)
        {
            try
            {
                string session_param_name = "ASPSESSID";
                string session_cookie_name = "ASP.NET_SessionId";
                if (HttpContext.Current.Request.Form[session_param_name] != null)
                {
                    UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);
                }
                else if (HttpContext.Current.Request.QueryString[session_param_name] != null)
                {
                    UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]);
                }
            }
            catch
            {
            }
            try
            {
                string auth_param_name = "AUTHID";
                string auth_cookie_name = FormsAuthentication.FormsCookieName;
                if (HttpContext.Current.Request.Form[auth_param_name] != null)
                {
                    UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);
                }
                else if (HttpContext.Current.Request.QueryString[auth_param_name] != null)
                {
                    UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]);
                }
            }
            catch
            {
            }
        }
        private void UpdateCookie(string cookie_name, string cookie_value)
        {
            HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
            if (null == cookie)
            {
                cookie = new HttpCookie(cookie_name);
            }
            cookie.Value = cookie_value;
            HttpContext.Current.Request.Cookies.Set(cookie);
        }
我的uploadify页面
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <link href="../../Content/uploadify/uploadify.css" rel="stylesheet" type="text/css" />
    <script src="../../Scripts/jquery-1.5.1.js" type="text/javascript"></script>
    <script src="../../Content/uploadify/jquery.uploadify.js" type="text/javascript"></script>
    <script src="../../js/jquery.easyui.min.js" type="text/javascript"></script>
    <link href="../../css/themes/default/easyui.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
        *
        {
            font-family: "microsoft yahei" , "Times New Roman" , "宋体" , Times, serif;
        }
    </style>
    <script type="text/javascript">
        var auth = "@(Request.Cookies[FormsAuthentication.FormsCookieName] == null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value)";
        var ASPSESSID = "@Session.SessionID";
        $(function () {
            $('#uploadify').uploadify({
                // debug: false,             //开启调试
                // successTimeout: 99999,            //超时时间
                formData: {                        //附带值
                    'userid': '用户id',
                    ASPSESSID: ASPSESSID,
                    AUTHID: auth
                },
                // queueID: 'some_file_queue',   //文件选择后的容器ID
                uploader: '/User/UploadUserImg',           // 服务器端处理地址
                swf: '../../Content/uploadify/uploadify.swf',    // 上传使用的 Flash
                width: 130,                          // 按钮的宽度
                height: 25,                         // 按钮的高度
                buttonText: "请选择上传的文件",                 // 按钮上的文字
                buttonCursor: 'hand',              // 按钮的鼠标图标
                fileObjName: 'Filedata',            // 上传参数名称
                // 两个配套使用
                fileTypeExts: "*.jpg;*.png",             // 扩展名
                fileTypeDesc: "请选择 jpg png 文件",     // 文件说明
                auto: false,                // 选择之后,自动开始上传
                multi: false,               // 是否支持同时上传多个文件
                queueSizeLimit: 1,          //设置上传队列中同时允许的上传文件数量 允许多文件上传的时候,同时上传文件的个数
                uploadLimit: 1,                         //uploadLimit:设置允许上传的文件数量,默认为999。
                // removeCompleted: false,   //设置已完成上传的文件是否从队列中移除,默认为true
                onQueueComplete: function (queueData) {//队列中全部文件上传完成时触发事件。
                    alert(queueData.uploadsSuccessful + '个文件上传完成,确认后刷新页面' + queueData.uploadsErrored);
                    window.parent.afterUpdateImg();
                },
                //返回一个错误,选择文件的时候触发
                onSelectError: function (file, errorCode, errorMsg) {
                    alert("error");
                    switch (errorCode) {
                        case -100:
                            alert("上传的文件数量已经超出系统限制的" + $('#uploadify').uploadify('settings', 'queueSizeLimit') + "个文件!");
                            break;
                        case -110:
                            alert("文件 [" + file.name + "] 大小超出系统限制的" + $('#uploadify').uploadify('settings', 'fileSizeLimit') + "大小!");
                            break;
                        case -120:
                            alert("文件 [" + file.name + "] 大小异常!");
                            break;
                        case -130:
                            alert("文件 [" + file.name + "] 类型不正确!");
                            break;
                    }
                },
                onFallback: function () {
                    alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。"); //检测FLASH失败调用
                },
                onUploadSuccess: function (file, data, response) { //上传到服务器,服务器返回相应信息到data里
                }
            });
        });
    </script>
    <title>UploadUserImg</title>
</head>
<body>
    <div>
        <span id="uploadify"></span>
    </div>
    <div>
        <button onclick="javascript:$('#uploadify').uploadify('upload','*');">
            上传图片</button>
        <button onclick="javascript:$('#uploadify').uploadify('cancel', '*');">
            取消上传</button>
    </div>
</body>
</html>
我的global
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Text;
using System.IO;
using System.Web.Security; namespace BoYaOA
{
// 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
// 请访问 http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
} public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
); } protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
} protected void Application_BeginRequest(object sender, EventArgs e)
{
try
{
string session_param_name = "ASPSESSID";
string session_cookie_name = "ASP.NET_SessionId";
if (HttpContext.Current.Request.Form[session_param_name] != null)
{
UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);
}
else if (HttpContext.Current.Request.QueryString[session_param_name] != null)
{
UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]);
}
}
catch { }
try
{ string auth_param_name = "AUTHID";
string auth_cookie_name = FormsAuthentication.FormsCookieName;
if (HttpContext.Current.Request.Form[auth_param_name] != null)
{
UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);
}
else if (HttpContext.Current.Request.QueryString[auth_param_name] != null)
{
UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]);
}
}
catch { }
}
private void UpdateCookie(string cookie_name, string cookie_value)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
if (null == cookie)
{
cookie = new HttpCookie(cookie_name);
}
cookie.Value = cookie_value;
HttpContext.Current.Request.Cookies.Set(cookie);
}
public void Application_Error() //Error是管道的事件 也可以从controller类看到 在前面加上Application_ 可以注册方法 放到mvc的GLOBAL
{
Exception ex = Server.GetLastError();
#region Logs
var fileName = DateTime.Now.ToString("yyyyMMdd") + ".txt";
var actualLogPath = Server.MapPath("/LogFiles/" + fileName);
StringBuilder builderLogs = new StringBuilder();
builderLogs.AppendLine("\r\n");
builderLogs.AppendLine("------------------------------------" + DateTime.Now.ToString());
builderLogs.Append(ex.ToString());
builderLogs.AppendLine("\r\n");
using (StreamWriter write = new StreamWriter(actualLogPath, true))
{
write.Write(builderLogs.ToString());
}
#endregion
//Server.Transfer("/WebError.htm", true);
//return "error";
} }
}
JQuery文件上传插件uploadify在MVC中Session丢失的解决方案的更多相关文章
- 强大的支持多文件上传的jQuery文件上传插件Uploadify
		
支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持Fla ...
 - jQuery文件上传插件Uploadify(转)
		
一款基于flash的文件上传,有进度条和支持大文件上传,且可以多文件上传队列. 这款在flash的基础上增加了html5的支持,所以在移动端也可以使用. 由于官方提供的版本是flash免费,html5 ...
 - 关于jquery文件上传插件 uploadify 3.1的使用
		
要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要 ...
 - jQuery文件上传插件uploadify
		
官方网站:http://www.uploadify.com/ 参考博客:jQuery Uploadify在ASP.NET MVC3中的使用 参考博客:使用uploadify上传图片时返回“Cannot ...
 - 文件上传插件Uploadify在Struts2中的应用,完整详细实例
		
—>最近由于项目需要使用到一个上传插件,在网上发现uploadify挺不错,所以决定使用它,但是官网文档和例子是php的,而项目是SSI框架的,所以自己对uploadify在struts2中的使 ...
 - 关于jquery文件上传插件 uploadify 3.1的使用
		
要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要 ...
 - jQuery 文件上传插件:uploadify、swfupload
		
jQuery 文件上传插件: uploadify.swfupload
 - 20款最好的jQuery文件上传插件
		
当它是关于开发网络应用程序和网页的时候,文件上传功能的重要性是不容忽视的.一个文件上传功能可以让你上传所有类型的文件在网站上,包括视频,图像,文件和更多.创建一个文件上传功能,对你的网站是不是很难,有 ...
 - jQuery文件上传插件jQuery Upload File 有上传进度条
		
jQuery文件上传插件jQuery Upload File 有上传进度条 jQuery文件上传插件jQuery Upload File,插件使用简单,支持单文件和多文件上传,支持文件拖拽上传,有进度 ...
 
随机推荐
- mac os 显示文件列表命令 ls -a
			
显示正常文件列表用ls就行了,但是要是想显示隐藏的文件,需要加-a
 - java call sap
			
1.下载需要的jar,windows用dll,linux用so win下载地址 linux下载地址 win下载地址new 2.环境: windows -> sapjco3.dll放到wi ...
 - POJ2735/Gym 100650E	 Reliable Nets dfs
			
Problem E: Reliable NetsYou’re in charge of designing a campus network between buildings and are ver ...
 - 不自动生成Android Dependencies的解决方式
			
今天遇到的奇怪问题是网上下载的demo导入第三方包运行后Android: NoClassDefFoundError的错误,原因是第三方的jar包并没有打包进apk里,运行是肯定要出错的. 网上百度了N ...
 - Windows Server 2008 R2遗忘管理员密码后的解决方案
			
在日常的工作中,对于一个网络管理员来讲最悲哀的事情莫过于在没有备用管理员账户和密码恢复盘的情况下遗忘了本地管理员账户密码. 在早期的系统中,遇到这种事情可以使用目前国内的很多Windows PE光盘来 ...
 - 【spring  bean】bean的配置和创建方式
			
---恢复内容开始--- 项目结构如下: lib如下: 1.首先建立SayHell.java接口 package com.it.sxd; public interface SayHell { publ ...
 - loadrunner录制脚本出现urs.asmx解决方法:
			
在loadrunner录制过程中可能出现如下脚本: 解决方法: 解决办法:打开IE9的Internet选项-->高级,把设置下面安全中“启用SmartScreen筛选器”不选中,IE默认是选中的 ...
 - 使用egypt+graphviz生成函数调用关系图示例
			
总结: make (-fdump-rtl-expand) 去除编译优化,比如-O3 egypt test.c.128r.expand >test.dot 可以手动打开dot文件去除一些孤立 ...
 - SU Demos-02Filtering-07Sumedian
			
不足之处,欢迎批评指正. 先看脚本内容: 脚本中用到的4个参数文件,是一系列x,t数据对,数组(x,t) 运行结果,
 - js:数据结构笔记5--链表
			
数组: 其他语言的数组缺陷:添加/删除数组麻烦: js数组的缺点:被实现为对象,效率低: 如果要实现随机访问,数组还是更好的选择: 链表: 结构图: 基本代码: function Node (elem ...