Flex在火狐下上传文件报错,IE下正常
来源:互联网 发布:java graphics类详解 编辑:程序博客网 时间:2024/06/08 06:11
1、背景
系统采用Spring开发,现在增加从Flex上传文件到服务器的功能。
采用的是FileReference对象完成,但是出现在IE下正常,FF失败的情况。
经过网上查找文章,发现:
Firefox中,FileReference使用的URLRequest和Flash所在页面用的不同的Session.
所以如果你的系统集成了,Spring-security或者其它的权限控制组件,一定要注意把上传的路径设置不拦截!!
因为之前权限组件设置拦截了所有请求,flash每次也只是报#2038 文件I/O 错误,所以一直不得解。-_-|||
参考文章:http://blog.csdn.net/ld_flex/article/details/5689536
在Flex中使用FileReference上传文件的时候,遇到了一个很怪的问题。文件上传在IE中一切正常,而在Firefox中总是失败。Debug后发现,firefox中上传文件时,请求总是没有验证。用google一把,发现原因是: Firefox中,FileReference使用的URLRequest和Flash所在页面用的不同的Session.所以即使你已经登录,由于上传的请求用的是不同的Session,服务器无法得知请求已经验证。 Adobe文档如此解释
翻译过来就是 FileReference 不支持验证功能。 [b]解决方法 [/b]1. 不使用FileReference,而使用form post上传文件。这样和普通的Html页面一样了。 2. 将Session id传到服务器。 如果你使用的Server是TomCat/JSP 可以如下添加SessionID. var request:URLRequest = new URL Request("http://www.[your url].com" + ";jsessionid=" _yoursessionid); 3. 不验证Session,而检查上传ID。比如每次上传前,服务器生成一个ID,上传的时候把这个传ID作为URLRequest的参数传过去。 4. 等待adobe发布hotfix. 有人知道怎么在Asp.net中把Session ID和URL一起传到服务器,而且服务器使用这个SessionID表示的Session吗? 我没有找到答案。
Firefox下flex无法上传文件的问题修复
http://blog.csdn.net/ld_flex/article/details/5689577
因为firefox是通过单独进程来实现flex的上传的,而这个单独进程并没有传递当前的cookie信息,从而服务器无法得知这个上传进程的session,所以导致各种各样的问题。
解决方法很简单,就是在上传的url中增加session_id的传递。比如JSP中可以直接用;JSESSION=xxxxxxxxxxxxx来实现session_id的传递。
而在php中,可以通过传递一个sid变量,然后在session_start()之前用session_id($_GET['sid'])方法来设置当前的session_id即可。注意要在session_start()之前设置。否则无效。
Flash中使用Filereference上传文件的一些注意事项
FileReference用来上传文件,结合FileReferenceList使用,可以弹出一次文件选择框就上传很多个文件,比HTML form形式的友好很多。但是使用的时候,有些地方需要注意的:
- 上传文件时,不能增加自定义request header
这点不同于URLLoader:URLLoader是可以增加自定义头部信息(request header)到对应的URLRequest对象中的,但是敏感的字段是不可以更改的,比如refer、cookie、host等等;而FileReferrence.upload使用的URLRequest,则不可以增加任何自定义头信息,所有自己添加的自定义header,都被播放器悄无声息地忽略掉了,没有任何报错和提示。如果一定要增加字段,只能添加到POST变量中。
- 只有在IE浏览器中, Filereference 才能附带浏览器Cookie信息
这是一个很汗的bug,在非IE浏览器中,利用FileReference发出的HTTP请求,带的cookie资料都是IE的cookie。即便在Firefox或者chrome中,传送的cookie也是IE的!有的同学说这和默认浏览器设置有关,例如将默认浏览器设为Firefox,那么IE就得不到cookie。但是我测试了一下,发现无论默认浏览器是什么,发送的都是IE的cookie。解决方案暂时是借用JS得到cookie( ExternalInterface.call(”javascript:document.cookie”) ),当作变量post过去。服务器端也要做相应的调整,比较麻烦,针对非IE浏览器用非Cookie方式验证。
- Filereference 得不到文件的本地路径
Flash10的Filereference可以得到本地文件的二进制文件 (存放在filereference.data)中,但是得不到文件路径(file://…)。这个问题还附带导致了一个问题,FilereferrenceList不能判断出重复选择的文件。就是说第一次弹出文件选择对话框的时候,用户选择了一个文件。过了一段时间再继续浏览文件,又选择了这个文件,这时候Flash是没有办法知道重复选择的。
- 不能设置上传的content-type
给Filereference.upload 使用的URLRequest,是受一些安全性限制的,除了本身的一些关键字段不能修改之外,contnent-type属性也不能修改。可能会让人郁闷的是,这个也没有任何throw/warning报错。content-type的值恒定为 “ application/octet-stream ”。
- Filereference只支持实际存在的文件的上传下载
要是要上传一些动态生成的数据到服务器存储,那就用不得Filereference,也看不到上传进度了。
内存里面的数据,希望上传到服务器保存为文件,可以用URLLoader,URLStream之类的代替。但是FlashPlayer10有个新增的安全性限制,当上传文件的时候,播放器会检查操作是否由用户点击触发。没有点击就上传,会被浏览器阻挡掉请求。播放器判断一个HTTP请求是否是文件上传的依据是form-based-HTML-file-upload规范,有两个标志:
一是content-type含有“ multipart”,例如“multipart/form-data”,“mymultipartxxx”;
二是字段名含有 filename。
满足了这两点,flash播放器就会把这次请求当作文件上传处理,进而检查是否符合安全限制。要防止被阻挡掉也很简单,不要用filename这个关键字做数据的字段名即可。
Flash站技术应用(7)—FileReference路径获取问题(FF也解决)
http://space.flash8.net/bbs/thread-323969-1-1.htmlflex文件上传filereference.upload出现Error #2038: 文件 I/O 错误。
http://blog.csdn.net/lucky_cxj/article/details/7453550
这段时间在做上传这块,总是会遇到 Error #2038: 文件 I/O 错误。
可以检查以下问题:
- URL无效- 上传文件大小超过服务器最大上传限制或最大POST限制- 与服务器连接异常中断- 上传的文件为空- 文件(夹)权限
- Flex在火狐下上传文件报错,IE下正常
- 我在开发上传图片文件预览的时候IE无法正常显示,火狐可以正常显示
- html 图片在IE下不能显示,但谷歌 火狐正常
- execCommand 在火狐下正常使用方法
- uploadify在火狐下上传文件失败解决方案
- css在IE、火狐下的兼容问题
- JS在火狐和IE下差别
- Flex用filereference上传文件firefox下报2038错误
- Uploadify在IE,fireFox下上传报406HTTP错误
- Uploadify在IE,fireFox下上传报406HTTP错误
- IE下无法删除标签,报“缺少对象”,而在chrome与firefox下都正常
- jquery uploadify 在火狐下可以选择上传文件,却上传不了文件
- IE下上传文件失效
- 上传组件 uploadify 导致在firefox下 session 不一致问题 ie正常
- 上传组件 uploadify 导致在firefox下 session 不一致问题 ie正常
- 解决网站中上传的图片在IE中不显示 chrome firefox下却正常
- ie 下uploadify上传插件失效报错
- IE和火狐关于文件上传路径然后下载的问题(正常路径IE识别,火狐识别不出正常的路径)
- poj 2388
- 项目三 多段函数求值 (2)用switch语句构造多分支结构 方法一
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
- 《Java虚拟机原理图解》 1.2、class文件中的常量池
- 第八周上机项目6:本月有几天
- Flex在火狐下上传文件报错,IE下正常
- 深入研究Struts2(三)---准备Struts2的学习和开发环境
- Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
- 游戏项目中运用到的设计模式(一)装饰者模式
- msyql binlog 数据恢复
- c/c++内存分配方式
- 第八周项目三多分段函数求值
- unity3d游戏开发之整合vs2008来加快unity c#开发
- sql之left join、right join、inner join的区别