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

Sean918 2013-06-06 09:36:50
RT

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

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

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

有效办法加分到100
...全文
278 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhao8848jun 2014-01-22
  • 打赏
  • 举报
回复
在哪个地方换?
引用 14 楼 wxy_xiaoyu 的回复:
搞定了 ! MVC 中只要把 FormsAuthentication.FormsCookieName 换成.ASPXAUTH 就可以了!! 多谢
Sean918 2013-06-09
  • 打赏
  • 举报
回复
搞定了 ! MVC 中只要把 FormsAuthentication.FormsCookieName 换成.ASPXAUTH 就可以了!! 多谢
Sean918 2013-06-09
  • 打赏
  • 举报
回复
刚刚用 firebug 看了一下 在第一次访问的时候 ASP.NET_SessionId 已经产生了一个sessionid 然后没有 ASPSESSID ,但是多了个 .ASPXAUTH 的cookie 不知道什么作用 再查查看
Sean918 2013-06-09
  • 打赏
  • 举报
回复
hi , 我知道 ASPSESSID 、 ASP.NET_SessionId 在普通的WebForm中有特殊作用。 但是我现在用的MVC里面好像机制不大一样,上面的这个代码在执行完毕后仍然无法路由到我指定访问的Action中去。 唉 还是学的不精的问题
SomethingJack 2013-06-09
  • 打赏
  • 举报
回复
- - MVC了解不多 处理机制不知道和Webform是否一样。 你明白cookie和session的关系么?还有你是否懂了 上面服务端这段代码的意思? 目前我的产品中 就是这么处理的。这也是目前为止唯一的解决方案。
Sean918 2013-06-09
  • 打赏
  • 举报
回复
首先 谢谢楼上的细致回答 但是,上面的这些代码我都看到过了,也尝试过了。 我现在是在ASP.NET MVC4的环境中做这个事情。 我现在的做法是,在访问页面的时候,将sessionid传到页面中,拼接到flash访问的url地址后,当作一个querystring来传递到服务端。 在服务端的Global.asax.cs文件的Application_BeginRequest事件中能得到上传的这个值。 然后问题就来了。 我不明白上面的这个代码,仅仅是修改了一下cookie的值,与session根本就没关系。 我尝试了一下上面的代码,cookie的值是被修改了,但是执行完了Application_BeginRequest事件后,代码根本无法路由到我指定的Action中去。 然后我又尝试修改session的值,但是在Application_BeginRequest事件中,无法访问session。 可是flash提交内容,根本就不触发 Session_Start 事件。 下面该怎么办?
SomethingJack 2013-06-09
  • 打赏
  • 举报
回复
你需要了解一下IHttpModule 它和全局应用程序有着相同的事件 只不过 全局应用程序 有点浪费资源 每个页面都要经过它
SomethingJack 2013-06-09
  • 打赏
  • 举报
回复
有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);
        }

    }
}
SomethingJack 2013-06-09
  • 打赏
  • 举报
回复
首先你的贴出你的上传代码 你有没有让Flash和JS交互? 不知道你是怎么实现上传的。没法回答你
Sean918 2013-06-08
  • 打赏
  • 举报
回复
能详细说说吗 ? 谢谢
SomethingJack 2013-06-08
  • 打赏
  • 举报
回复
给你一个提示 在HttpModule中的事件中处理一下或者全局应用程序。 在客户端获取SAEESID 上传的时候作为参数带过去 再验证是否一致。
Sean918 2013-06-08
  • 打赏
  • 举报
回复
我晕 我找了plupload 的例子 ,也出现了 #2038 的错误 跟flash 一样
wrost 2013-06-07
  • 打赏
  • 举报
回复
是存在这个问题 用plupload,这个也是flash,不存在这样问题。
Sean918 2013-06-07
  • 打赏
  • 举报
回复
求高人帮忙啊
Sean918 2013-06-07
  • 打赏
  • 举报
回复
没人知道吗 ??

62,017

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧