首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

Flash编写的文件上传在火狐下报IO异常

2013-07-04 
Flash编写的文件上传在火狐下报IO错误RT在IE下可以用,在其他浏览器下就是提交不了。查了很多资料,说Flash通

Flash编写的文件上传在火狐下报IO错误
RT

在IE下可以用,在其他浏览器下就是提交不了。

查了很多资料,说Flash通过FileReference上传文件时,始终会取IE的cookie还是sessionid,导致服务端认为不是同一个连接,所以上传地址找不到。

有人知道解决办法吗?最好是C#版的解决方法。

有效办法加分到100 Flash?上传文件
[解决办法]
是存在这个问题

用plupload,这个也是flash,不存在这样问题。
[解决办法]
有2个插件曾经研究过.
一个是Uploadify一个是SWFUpload.  Flash有一个共同的弊端就是所谓的Session丢失 
其实不是丢失了 只是产生了不同的Seesion  那么你要做的时候 记录客户端Session值 
上传的时候利用Url传参或者其他方式 将这个Seesion一起传递到服务器 验证是否一致。

参考代码. 注意看其中的一个参数ScriptData


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <link href="/Uploadify/uploadify.css" rel="stylesheet" type="text/css" />

    <script src="/Uploadify/jquery-1.4.2.min.js" type="text/javascript"></script>

    <script src="/Uploadify/jquery.uploadify.v2.1.4.min.js" type="text/javascript"></script>

    <script src="/Uploadify/swfobject.js" type="text/javascript"></script>

    <script type="text/javascript">
        var auth = "<% = Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value %>";
        var ASPSESSID = "<%= Session.SessionID %>";
        alert(ASPSESSID);
        
        $(document).ready(function () {
                $('#uploadify').uploadify({
                    'uploader': '/uploadify/uploadify.swf',
                    'script': '/Uploadify.ashx',
                    'cancelImg': '/uploadify/cancel.png',
                    'folder': '/uploads',
                    'auto': false,
                    'buttonText': '', 
                    'buttonImg':'/Uploadify/browse.jpg',


                    'scriptData': { 'ASPSESSID': ASPSESSID, 'AUTHID': auth },
                    'onSelect': function (e, data) {
//                        $('#uploadify').uploadifySettings('scriptData', { 'ASPSESSID': ASPSESSID, 'AUTHID': auth });
                    },       
                    'onComplete' : function(event,queueID,file,serverData,data){ 
            //serverData为服务器端返回的字符串值
            alert(serverData);
             }
                });
            });
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div id="fileQueue">
    </div>
    <input type="file" name="uploadify" id="uploadify" />
    <p>
        <a href="javascript:$('#uploadify').uploadifyUpload()">上传</a>
[解决办法]
 <a href="javascript:$('#uploadify').uploadifyClearQueue()">
            取消上传</a>
    </p>
    </form>
</body>
</html>



服务端这么处理


using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace UploadifyDemo
{
    public class SessionModule : IHttpModule
    {
        //   销毁不再被HttpModule使用的资源
        public void Dispose()
        {
        }

        // 初始化一个Module,为捕获HttpRequest做准备
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        public void context_BeginRequest(object sender, EventArgs e)
        {


            string session_param_name = "ASPSESSID";
            string session_cookie_name = "ASP.NET_SessionId";
            string auth_param_name = "AUTHID";
            string auth_cookie_name = FormsAuthentication.FormsCookieName;

            HttpContext context = HttpContext.Current;

            if (context.Request.Form[session_param_name] != null)
            {
                UpdateCookie(session_cookie_name, context.Request.Form[session_param_name]);
            }
            else if (HttpContext.Current.Request.QueryString[session_param_name] != null)
            {
                UpdateCookie(session_cookie_name, context.Request.QueryString[session_param_name]);
            }
            else if (context.Request.Form[auth_param_name] != null)
            {
                UpdateCookie(auth_cookie_name, context.Request.Form[auth_param_name]);
            }
            else if (context.Request.QueryString[auth_param_name] != null)
            {
                UpdateCookie(auth_cookie_name, context.Request.QueryString[auth_param_name]);
            }
        }

        public 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);
        }

    }
}

热点排行