2

ブラウザを更新せずに写真をアップロードするために、このコードをどこかで入手しました。しかし、アップローダ ファイルが気に入らなかったので、以前使用していた古いファイルを使用することにしました。問題は、javascript ファイルから文字列ではなく配列を送信していることです (1 つだけではなく、複数のファイルを送信することを意図していました)。配列を作成するコードは次のとおりです。

input.addEventListener("change", function (evt) {
    document.getElementById("response").innerHTML = "Loading . . ."

    var i = 0, len = this.files.length, img, reader, file;

    for ( ; i < len; i++ ) {
        file = this.files[i];
            if (formdata) {
                formdata.append("uploaded_file[]", file);
    }   }   }

    if (formdata) {
        $.ajax({
            url: "img_upload.php",
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false
        }).done(function (res) {
                            /* *** show uploaded item *** */
                            /* *** show response *** */
            });
    }

Javascript に関する私の知識は非常に弱く、アップロードされたファイルを配列ではなく単独で送信するようにこのコードを変更する方法がわかりません。

これらを個別に試しましたが、どれも機能しませんでした (send_img はフォーム名/ID です):

formdata = document.send_img.uploaded_file.value;
formdata = document.getElementById("uploaded_file");
formdata = new formdata ($('#send_img'));
formData = $('#send_img').serialize();
formdata.replaceWith("uploaded_file[]", file);

また、同じキー (0) を使用するために を削除しようとしましたforが、そのようには機能しません。img_upload.php の要約コードは次のとおりです。

$fileName = $target . $_FILES["uploaded_file"]["name"];
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"];
$fileName = $new_name .  "."  . $fileExt;
move_uploaded_file($fileTmpLoc, "images/images/temp/$fileName");

アップロードされたファイル (またはヘッダーまたは送信するはずのもの) を 1 つの文字列で送信し、2 番目のファイルが追加された場合に、配列に 2 番目の値を作成する代わりに最初のファイルを置き換えるにはどうすればよいですか?

4

2 に答える 2

1

問題はあなたの論理ではありません。問題はファイルを ajax 経由でアップロードできないことです。

しかし、おそらくあなたは、他の人はどうしましたか?では、フォーム プラグイン (jQuery で動作する別の .js) を試してください。

これは「送信」メソッドを使用して機能しますが、入力が変更されたときに送信したり、JavaScript アクションを使用して他の種類のソリューションを見つけたりすることができます。

これを確認してください:http://www.miguelmanchego.com/2009/subir-archivos-usando-ajax-jquery/

ウェブサイトはスペイン語ですが、必要に応じて英語に翻訳してください。また、そのリンクには、ライブの例とソースコードのダウンロードが含まれています。

よろしく。

于 2012-01-30T18:42:32.483 に答える
0

以下は、ファイルをアップロードできる私のajax設定です

method: "POST",
        url: url,
        headers: { 'Content-Type': undefined },
        transformRequest: function (data, headersGetter) {
            var formData = new FormData();
            angular.forEach(data, function (value, key) {
                if (Array.isArray(value)) {
                    // To save array of items
                    angular.forEach(value, function (value1, key1) {
                        if (value1.constructor.name != "File") {
                            angular.forEach(value1, function (value2, key2) {
                                formData.append(key + '[' + key1 + '].' + key2, value2);
                            });
                        }
                    });
                } else {
                    formData.append(key, value);
                }
            });

            return formData;
        },
        enctype: 'multipart/form-data',
        dataType: 'json',
        traditional: true,
        data: data,
        cache: false,
        processData: false,
        contentType: false
于 2016-01-17T09:54:35.990 に答える