【问题标题】:$.ajax Sending File formdata along with variables$.ajax 与变量一起发送文件表单数据
【发布时间】:2013-04-05 14:06:17
【问题描述】:

我正在尝试按照本教程中的步骤创建一个简单的 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 方法,我通常使用 $_POST['code'] 和 $_POST'token'],但是如何读取图像 formdata 对象?

【问题讨论】:

    标签: php javascript jquery ajax file-upload


    【解决方案1】:

    如果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

    顶部有一个演示链接供您试用。如果您决定使用它并遇到任何问题,只需 ping 我,我可以帮助您。祝你好运。

    【讨论】:

    • 会不会像 $token = $_POST['token'], $code = $_POST['code'] 和图像 $_FILES['images']['tmp_name']; - 顺便说一下,我是为了练习目的而做的,我确实有一个 ie 的后备,但你的插件也很棒
    • 是的,完全正确。 $_POST['token']$_POST['code']。我还建议您阅读以下内容:php.net/manual/en/features.file-upload.php cmets 也有一些很好的信息。
    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多