使用jQuery上传多个图片

时间:2018-09-21 18:49:05

标签: php jquery

这是我的代码,我有多个输入字段,因此我想在提交后上传图片,但是这样就只上传了第二张图片。

表单页面

<script>
    function sendimg() {
        alert("ok");
        var newname = $('#txtname').val();
        var file_data1 = $('#inputfile1').prop('files')[0];
        var file_data2 = $('#inputfile2').prop('files')[0];
        var form_data = new FormData();                     // Create a form
        form_data.append('inputfile[]', file_data1);
        form_data.append('inputfile[]', file_data2);

        $.ajax({
            url: "img2.php",
            type: 'post',
            cache: false,
            contentType: false,
            processData: false,
            data: {form_data, name:newname},
            success: function (response) {
                alert(response);
            }
        });
    }
</script>
<input type='file' name='inputfile[]' id='inputfile1'>
<input type='file' name='inputfile[]' id='inputfile2'>
<input class="button" type="button" id="post_ad_btn" name="post_ad_btn"  value="POST AD" onclick="sendimg();">

upload.php

$src = $_FILES['inputfile'][0]['tmp_name'];
$targ = "../".$_FILES['inputfile'][0]['name'];
move_uploaded_file($src, $targ);

$src = $_FILES['inputfile'][1]['tmp_name'];
$targ = "../".$_FILES['inputfile'][1]['name'];
move_uploaded_file($src, $targ);

3 个答案:

答案 0 :(得分:2)

        form_data.append('inputfile', file_data1);
        form_data.append('inputfile', file_data2); 

您正在覆盖旧值。要通过POST将数组发送到PHP,您需要在输入名称的末尾附加[],处理数组时事情会有些复杂,所以最好的选择就是通过传递表格来序列化表格到FormData构造函数。在进行此操作时,最好使用适当的jQuery事件绑定。

<form>
    <input type='file' name='inputfile[]' id='inputfile1'>
    <input type='file' name='inputfile[]' id='inputfile2'>
    <input class="button" type="button" id="post_ad_btn" name="post_ad_btn"  value="POST AD">
</form>

<script>
    $("#post_ad_btn").on("click", function (e) {
        alert("ok");
        var form = $(this).closest("form");
        var form_data = new FormData(form);

        $.ajax({
            url: "upload.php",
            type: 'post',
            cache: false,
            contentType: false,
            processData: false,
            data: form_data,
            success: function (response) {
                alert(response);
            }
        });
    });
</script>

答案 1 :(得分:1)

inputfile字段必须作为PHP的数组出现,如下所示:

form_data.append('inputfile[]', file_data1);
form_data.append('inputfile[]', file_data2);

在此处FormData.append() @ MDN Web Docs

中查看第三个示例

答案 2 :(得分:1)

不是因为附加名称相同吗?如果您想要一个数组,我相信正确的方法是放[]。

form_data.append('inputfile []',file_data1);  form_data.append('inputfile []',file_data2);