【问题标题】:Uploadify: show error message from HTTP responseUploadify:显示来自 HTTP 响应的错误消息
【发布时间】:2009-12-09 23:19:29
【问题描述】:

如果使用 Uploadify 上传文件时服务器返回错误(HTTP 响应代码!= 200),则上传的文件会变成红色背景并显示如下消息:

file.jpg (52.78KB) - HTTP Error

表示存在 HTTP 错误。但这对用户来说不是很有用。如何让它显示更详细的错误消息?比如:“图片无效”或“配额已满”?

我正在考虑在 HTTP 响应正文中传递这些消息,但 Uploadify 没有接收它们。有没有已知的方法可以将错误消息传回 Uploadify?

【问题讨论】:

    标签: uploadify


    【解决方案1】:

    看看uploadify论坛上的这两篇关于如何处理错误的帖子

    onError to display what's happening 和 Upload script error reporting

    里面有很多有用的信息..

    更新

    以下内容似乎对我有用..

    'onComplete': function(a, b, c, d, e){
                        if (d !== '1')
                            {
                            alert(d);
                            }
                        else
                            {
                            alert('Filename: ' + c.name + ' was uploaded');
                            }
                      }
    

    加上这个版本的uploadify脚本

    <?php
    
        if (!empty($_FILES)) 
        {
            $tempFile = $_FILES['userfile']['tmp_name'];
    
            $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
            $targetFile =  str_replace('//','/',$targetPath) . $_FILES['userfile']['name'];
    
            move_uploaded_file($tempFile,$targetFile);
    
            switch ($_FILES['userfile']['error'])
            {     
                case 0:
                 $msg = ""; // comment this out if you don't want a message to appear on success.
                 break;
                case 1:
                  $msg = "The file is bigger than this PHP installation allows";
                  break;
                case 2:
                  $msg = "The file is bigger than this form allows";
                  break;
                case 3:
                  $msg = "Only part of the file was uploaded";
                  break;
                case 4:
                 $msg = "No file was uploaded";
                  break;
                case 6:
                 $msg = "Missing a temporary folder";
                  break;
                case 7:
                 $msg = "Failed to write file to disk";
                 break;
                case 8:
                 $msg = "File upload stopped by extension";
                 break;
                default:
                $msg = "unknown error ".$_FILES['userfile']['error'];
                break;
            }
        }
        if ($msg)
            { $stringData = "Error: ".$_FILES['userfile']['error']." Error Info: ".$msg; }
        else
            { $stringData = "1"; } // This is required for onComplete to fire on Mac OSX
        echo $stringData;
    ?>
    

    【讨论】:

    • 似乎没有办法获取 HTTP 响应正文。因此,从服务器向输出提供更多有用的错误消息是没有用的,因为您无法显示它们。
    • 好的,我现在看到了...只有 onComplete 可以访问响应正文。 onError 没有,但那是我一直在寻找的地方,因为我想显示额外的信息,你知道,以防出现错误。但显然 onComplete 也会因错误而触发?从而使我们能够获得响应体。为什么 Uploadify 的开发者不只是将响应传递给 onError 函数,这超出了我的理解……
    • 尝试后,onComplete 似乎不会触发以防出错。所以就我现在所见,如果出现错误,没有办法获取 http 响应正文。因此,问题仍然存在。是时候联系 Uploadify 的作者并询问他为什么不提供 onError 访问 http 响应正文的权限...
    【解决方案2】:

    不幸的是 onUploadError 事件无法访问响应正文。据我所知,您必须返回 200 状态并处理 onUploadSuccess 中的错误。

    这是我的做法:

    'onUploadSuccess' : function(file, data, response) {
                var responseObj = JSON.parse(data);
                if(responseObj.error_message)
                {
                    $("#" + file.id).hide();   // this will hide the misleading "complete" message..
                    alert(responseObj.error_message);
                    return;
                }
            }
    

    或者更好的是,您可以将“完整”消息替换为您的错误消息,如下所示:

     'onUploadSuccess' : function(file, data, response) {
                var responseObj = JSON.parse(data);
                if(responseObj.error_message)
                {
                    $("#" + file.id).find('.data').css('color', 'red').html(' - ' + responseObj.error_message);
                    return;
                }
                console.log(file, data, response);
            }
    

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题。经过几个小时的搜索,我发现了问题。我在“internet Options->Lan setting”中设置了“proxy server”,当我将其恢复为默认状态时,uploadify 再次工作。

      【讨论】:

      • 你没有检查,是吗?在您设置代理时尝试使用uploadify [错误代理],我已经检查过,uploadify 没有工作。 100% 是相关的,也许你的问题出在你的代码上,但我的问题是因为代理。
      • 哦,对不起,你是对的。我在没有代理的情况下尝试了它,现在我完全从 HTTP 响应中得到了错误消息。我的(不存在的)代理一定在我之前的测试中完全吃掉了那个消息!
      【解决方案4】:

      对于uploadify 3.0+ 版本,请查看onUploadSuccess 选项——特别是传入的名为data 的变量——它将具有服务器回显的任何内容。如果你回显 JSON,记得像这样解码它:

      ...
      'onUploadSuccess' : function(file, data, response) {
          if (response){
              var json_data=JSON.decode(data);
              /* code here */
          }
      },
      ....
      

      【讨论】:

      • 数据上传的时候是否也会触发,但是服务器响应的是非200 HTTP错误码?
      • @hopla 我不这么认为,而只是在 200 响应中。我相信onUploadError 方法可以捕获非 200 个 HTTP 代码
      • @Site,onUploadError 事件无权访问响应正文。有人解决了吗?
      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      相关资源
      最近更新 更多