使用Uploadify时为什么会丢失一些POST数据?

时间:2010-04-19 22:40:31

标签: php flash upload uploadify

在过去的几个月里,我一直在我的PHP应用程序中使用Uploadify,而且我一直试图追踪一个难以捉摸的错误。当发生致命错误时,我会收到电子邮件,并且它们为我提供了大量详细信息。我收到了几十个。但是,我没有能够自己重现这个问题。有些用户(比如我自己)没有遇到任何问题,而其他用户则没有问题。

在我提供问题的详细信息之前,这是流程。

  • 用户访问我正在使用的CMS中的页面的编辑屏幕。
  • 页面的记录ID将作为隐藏值放入表单中。
  • 用户单击Uploadify浏览按钮并选择一个文件(仅允许单个文件选择)。
  • 用户点击表单的“提交”按钮。
  • jQuery拦截表单提交操作,触发Uploadify开始上传,并为提交操作返回false(手动取消表单提交事件,以便Uploadify可以接管)。
  • 将上传上传到自定义流程脚本。
  • Uploadify完成上传并触发Javascript完成回调。
  • Javascript回调调用$('#myForm')。submit()来提交表单。

现在应该发生的事情。我收到了上传冻结率100%的报告以及显示“I / O错误”的其他报告。

正在发生的是,表单是使用完成回调提交的,但表单中存在的一些帖子参数根本不在帖子数据中。页面的id,我之前说的是作为隐藏字段添加到表单中,在post数据($ _POST)中根本不存在 - $ _POST数组中没有'id'项。奇怪的是,帖子数据DOES包含某些字段的值。例如,我有一个名为“name”的文本输入,用于记录名称,它确实显示在帖子数据中。

以下是我收集的内容:

  • 这在Mac OSX 10.5和10.6,Windows XP和Windows 7上已经发生。如果有帮助,我可以发布确切的用户代理字符串。
  • 用户必须使用Flash 10.0.12或更高版本。我们已经这样做了,如果它们具有<那么表格将恢复为使用普通的“文件”字段。 10.0.12。

有没有人有任何想法可能是什么原因?

3 个答案:

答案 0 :(得分:3)

IOError: Client read error (Timeout?)

虽然我的服务器端是python / django,但我得到了同样的错误。我认为它是客户端超时,但回顾现在的日志,现在看来,当我在身份验证例程中更改了某些内容时,这种情况就会出现重合。是否有可能服务器正在接收文件但拒绝将其写入存储?

另外,您知道有几个Flash客户端不发送cookie吗?你必须通过将会话密钥注入uploadify的'scriptData'变量来解决它。

X --------------------------------

编辑。这个python / django代码从uploadify提交自己的例程开始:

# Adobe Flash doesn't always send the cookies, esp. from Apple Mac's.
# So we've told flash to send the session keys via POST. So recreate the
# session now. Also facilitates testing via curl.
cookie_name = settings.SESSION_COOKIE_NAME
if request.member.is_anonymous() and request.POST.has_key(cookie_name):

        # Convert posted session keys into a session and fetch session
        request.COOKIES[cookie_name] = request.POST[cookie_name]
        SessionMiddleware().process_request(request)

# boot anyone who is still anonymous
if request.member.is_anonymous():
    response['message'] = "Your session is invalid. Please login."
    return HttpResponse(simplejson.dumps(response), mimetype='application/json')

答案 1 :(得分:0)

Uploadify可能会改变表单。在uploadify完成并调用回调时,请查看表单的html / DOM树。

答案 2 :(得分:0)

你是否尝试在Firefox中使用Live HTTP Headers来查看是否有某种重写发生导致帖子数据丢失?