qiezi的学习园地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首页 :: 新随笔 ::  ::  :: 管理 ::
问题:

使用Flash 8提供的FileReference可以方便地一次选择多个文件上传,不过除了在IE上以外,其它浏览器上的都会出现Cookie与浏览器不一致的问题。

解决办法: 直接的做法就是在上传时,附加一个session_id在URL上,在服务端处理时使用这个Session。

在Rails中,可以把_session_id=xxxx附加在URL上。不过测试的结果是,附加的session_id只有在GET请求时才正常,POST请示时会被忽略。

知道了这一点,只需要寻找GET和POST请求处理的差别。也费了一番周折,才发现问题出在actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb里。

只需要在POST时也处理一下URL参数即可。由于它是通过read_query_params方法来分开处理的,所以要在POST请求时,调用一下read_query_params(:get),并把结果合并。代码如下:

@params.merge!(CGI.parse(read_query_params(:get))) if method == :post || method == :put

这行加到initialize_query方法尾部即可。由于原来的方法可能返回了@params,所以也加一行@params在结尾,以免造成不必要的麻烦。
posted on 2006-07-03 23:58 qiezi 阅读(677) 评论(1)  编辑 收藏 引用 所属分类: Ruby