【问题标题】:ajax file upload for specific number of inputajax文件上传特定数量的输入
【发布时间】:2026-02-26 02:05:01
【问题描述】:
<form class="imagegen_file" enctype="multipart/form-data" action="/image_maker/file">
<input class="file" name="image_0" type="file">
<input class="file" name="image_1" type="file">
<input class="file" name="image_2" type="file">
<input class="file" name="image_3" type="file">
<input .....
</form>

<a onclick="return image_gen_file();">upload</a>

<script type="text/javascript">
function image_gen_file(){
    var data = new FormData();
    jQuery.each($('.file')[0].files, function(i, file) {
        data.append('image_'+i, file);
    });

    $.ajax({
        url: baseurl + "/image_maker/file",
        data: data,
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST',
        success: function(data){
            alert(data);
        }
    });

}</script>

上面的代码文件上传只适用于第一个输入(“image_0”)我想让它适用于所有其他人我该怎么做?

【问题讨论】:

    标签: php ajax upload


    【解决方案1】:

    你只是循环了第一个input。你需要一个嵌套循环:

    var data = new FormData();
    
    $('.file').each(function(i) {
        $.each(this.files, function(j) {
            data.append('image_' + i + '_' + j, this);
        });
    });
    

    如果您想在各自的 AJAX 帖子中发布它们,请改用:

    $('.file').each(function() {
    
        var data = new FormData();
    
        jQuery.each(this.files, function(i, file) {
            data.append('image_'+i, file);
        });
    
        $.ajax({
            url: baseurl + "/image_maker/file",
            data: data,
            cache: false,
            contentType: false,
            processData: false,
            type: 'POST',
            success: function(data) {
                alert(data);
            }
        });
    });
    

    【讨论】:

    • 我想一次性发布它们。$('.file').each(function() 代码只输出 (image_0) 的单个数组
    • @RajeshDante - 我不明白。在我向您展示的第一种方法中,data 将包含 all 表单中的图像!
    • link 检查链接我选择了 3 张图片,但它只显示了一张图片
    • @RajeshDante - 那是我的错。我没有使用外循环的索引。我现在加了。试试看。
    • 我可以在数据中添加 id 吗?像这样data: data + "&amp;id=123",
    【解决方案2】:
    var data = new FormData();
    $('.file').each(function(i) {
        data.append('file'+i, this.files[0]);
    });
    $.ajax({
        url: baseurl + "/image_maker/file",
        data: data,
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST',
        success: function(data) {
            alert(data);
        }
    });
    

    【讨论】: