5

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

在我给出问题的细节之前,这里是流程。

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

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

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

这是我收集的内容:

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

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

4

3 回答 3

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')
于 2010-04-26T10:44:25.073 回答
0

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

于 2010-04-26T11:45:31.863 回答
0

Have you tried using Live HTTP Headers in Firefox to see if there is some kind of rewrite happening that is causing the post data to be lost?

于 2010-04-26T11:59:05.193 回答