douyunjiaok300404 2015-01-20 18:03
浏览 69

jQuery - 使用输入多个循环发布单个文件

I need to post with jQuery files from a multiform form. The problem is I don't know how to send each file individually with a foreach loop, so I can get upload success from each file separately.

Here's my function to send each file to PHP:

        var fileInput = document.getElementById ("images_upload_new_album");
        if ('files' in fileInput) {
            //console.log(fileInput.files);
            $.each(fileInput.files, function(index, val) {
                 /* iterate through array or object */
                 console.log(fileInput.files[index]);
                $.ajax({
                    url: config.site + "admin/photos/upload_test",
                    type: 'POST',
                    data: {file: fileInput.files[index].name},
                    dataType: 'json',
                    mimeType:"multipart/form-data",
                    contentType: false,
                    cache: false,
                    processData:false,
                    beforeSend: function (data) {
                        console.log("Before send.");
                        //console.log(data);
                    }, // AJAX request is about to be sent
                    complete: function (data) {
                        console.log("Complete.");
                        //console.log(data);
                    }, // AJAX request has completed
                    success: function(data, textStatus, jqXHR) // AJAX request has completed successfully
                    {
                        console.log("success.");
                        console.log(data);
                    },
                    error: function(jqXHR, textStatus, errorThrown) // AJAX request has completed with errors
                    {
                        console.log("error.");
                    }
                });
            });
        };

And my PHP test function.

public function upload_test()
{
    $received = $_FILES;
    echo json_encode($received);
}

What I get from console:

File {webkitRelativePath: "", lastModified: 1418160606000, lastModifiedDate: Tue Dec 09 2014 20:30:06 GMT-0100 (Hora padrão dos Açores), name: "100371.jpg", type: "image/jpeg"…}
Before send.
Modal it's opened
success.
[]
Complete.

This is my multiform:

<form action="http://xxxxxxx.dev/admin/photos/upload" id="upload_form" enctype="multipart/form-data" method="post" accept-charset="utf-8">
<input type="file" name="images_upload_new_album[]" value="" id="images_upload_new_album" class="hidden_images_upload" style="visibility: hidden; width: 0px; height: 0px" multiple="multiple" accept=".jpg"  />
</form>
  • 写回答

1条回答 默认 最新

  • duanpeng1532 2015-01-21 13:09
    关注

    I solved the problem by recreating the POST loop:

        $('#new-album-modal').on('show.bs.modal', function (e) {
            // Runs after show modal event is fired
            var fileInput = document.getElementById ("images_upload_new_album");
            if ('files' in fileInput) {
                jQuery.each($('#images_upload_new_album')[0].files, function(i, file) {
                    var data = new FormData();
                    data.append('fileinput', file);
                    $.ajax({
                        url: config.site + "admin/photos/upload_test",
                        type: 'POST',
                        data: data,
                        dataType: 'json',
                        mimeType:"multipart/form-data",
                        contentType: false,
                        cache: false,
                        processData:false,
                        beforeSend: function (data) {
                            console.log("Before send.");
                            //console.log(data);
                        }, // AJAX request is about to be sent
                        complete: function (data) {
                            console.log("Complete.");
                            //console.log(data);
                        }, // AJAX request has completed
                        success: function(data, textStatus, jqXHR) // AJAX request has completed successfully
                        {
                            console.log("success.");
                            console.log(data);
                        },
                        error: function(jqXHR, textStatus, errorThrown) // AJAX request has completed with errors
                        {
                            console.log("error.");
                        }
                    });
                });
            };
        });
    

    This problem was solved based on this post: http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘