2

このチュートリアルの手順に従って、単純な jquery ファイルのアップロードを作成しようとしています: http://net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/で、完全に機能し、優れています。ただし、ユーザーが画像をアップロードできるものをより細かく制御し、セキュリティを強化したいと考えています。たとえば、トークンも送信できるようにしたいと考えています。これが私の元のコードです:

 $('#images').change(function (evt) {
    $('#response').text("Uploading . . .");
    var amount = this.files.length;
    var reader, file;
    alert(formdata);
    for (var i = 0; i < amount; i++ ) {
        file = this.files[i];
        if (!!file.type.match(/image.*/)) {
            if ( window.FileReader ) {
                reader = new FileReader();
                reader.onloadend = function (e) { 
                    appendUploadedPic(e.target.result, file.fileName);
                };
                reader.readAsDataURL(file);
            }
            if (formdata) {
                formdata.append("images[]", file);
            }
        }   
    }

    if (formdata) {
        $.ajax({
            url: "php/upload.php",
            type: "POST",
            data: formdata,
            dataType:'json',
            processData: false,
            contentType: false,
            success: function (res) {
                $('#response').html(res['image_name']); 
            }
        });
    }
});

PHPはこれまでのところ単純です

foreach ($_FILES["images"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $name = $_FILES["images"]["name"][$key];
        move_uploaded_file( $_FILES["images"]["tmp_name"][$key], "../members/" . $_FILES['images']['name'][$key]);
    }
}

$respond = array("filename" => $_FILES["images"]["name"][0], "type" => "image");
echo json_encode($respond);

今私がやりたいことはこれです

 $.ajax({
            url: "php/upload.php",
            type: "POST",
            data: 'token=someToken&code=upload&data='+formdata,
            dataType:'json',
            processData: false,
            contentType: false,
            success: function (res) {
                $('#response').html(res); 
            }
        });

出来ますか?もしそうなら、どのようにphpからそれを読むのですか? 通常は $_POST['code'] と $_POST'token'] を使用するポスト メソッドですが、データ オブジェクトから画像を読み取るにはどうすればよいでしょうか。

4

1 に答える 1

5

formdataで作成された場合はFormData、次のようにフィールドを追加します。

formdata.append(name, value);

したがって、トークン フィールドとコード フィールドを追加する場合は、次のようになります。

if (formdata) {
    formdata.append("images[]", file);
    formdata.append("token", "someToken");
    formdata.append("code", "someCode");
}

ただし、このアップロード方法は、インターネット ユーザーの約半数を占める IE6 ~ IE9 などの多くのブラウザではサポートされていないことに注意してください。

ブラウザのサポートを検出し、利用可能な最善の方法を使用するプラグインを使用することをお勧めします。私はまさにその目的のためにこのプラグインを書きました:

https://github.com/LPology/Simple-Ajax-Uploader

試してみるには、上部にデモへのリンクがあります。それを使用することに決め、問題が発生した場合は、私に連絡してください。私はあなたを助けることができます. 幸運を。

于 2013-04-12T22:47:34.767 に答える