web-dev-qa-db-ja.com

Uploadify:HTTP応答からのエラーメッセージを表示する

Uploadifyを使用してファイルをアップロードするときにサーバーがエラー(HTTP応答コード!= 200)を返すと、アップロードされたファイルの背景が赤になり、次のようなメッセージが表示されます。

file.jpg (52.78KB) - HTTP Error

hTTPエラーが発生したことを示します。しかし、それはユーザーにとってあまり役に立ちません。より詳細なエラーメッセージを表示するにはどうすればよいですか?例:「有効な画像ではありません」または「クォータがいっぱいです」?

これらのメッセージをHTTP応答本文で渡すことを考えていましたが、Uploadifyはそれらを取得しません。エラーメッセージをUploadifyに返す既知の方法はありますか?

18
hopla

エラーの処理方法については、uploadifyフォーラムのこれら2つの投稿をご覧ください。

onErrorで何が起こっているかを表示します および スクリプトエラーレポートをアップロードします

そこにはたくさんの役立つ情報があります..

更新

以下は私のためにトリックをするようです..

'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;
?>
9

残念ながら、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);
        }
4
RayLoveless

私も同じ問題を抱えています。何時間も検索した後、私は問題を見つけました。 「インターネットオプション-> LAN設定」で「プロキシサーバー」を設定しましたが、デフォルトの状態に戻すと、uploadifyが再び機能しました。

2
Mostafa -T

Uploadifyバージョン3.0以降の場合は、 onUploadSuccess オプション(具体的にはdataという名前の渡された変数)を確認してください。これには、サーバーがエコーしたものがすべて含まれます。 JSONをエコーする場合は、次のようにデコードすることを忘れないでください。

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