jQuery文件上传并获取$ _Files

时间:2012-04-23 07:33:29

标签: php jquery file-upload

我正在使用jQuery插件https://github.com/blueimp/jQuery-File-Upload来加载文件。我只是想使用上传按钮来显示所选文件,并仅在提交表单时上传文件。以下是我的代码:

    <form id="myform" method="post" enctype="multipart/form-data">
                <span class="btn btn-success btn-mini fileinput-button">
                    <i class="icon-plus icon-white"></i>
                    <span>Add files</span>
                    <input  id="fileupload" type="file" name="files[]" multiple>
                    <button type="submit" id="start_uploads">Start uploads</button>
                </span>
    </form>

我可以使用以下代码创建列表:

$('#fileupload').fileupload({
        dataType: 'json',
        add: function (e, data) {
                           $.each(data.files, function (index, file) {
                              //alert('Added file: ' + file.name);
                                 $('<li/>').text(file.name).appendTo('#fileList');
                                            });

                                    },

                                });

但是当我提交表单时,我无法获得$ _FILES或var_dump(files)中的任何内容;任何人都可以帮助我解决我错过的问题以及如何实现这一目标? 有一点需要注意的是,如果我不使用js代码进行列表,那么请获取包含所有选定文件的$ _FILES变量。

1 个答案:

答案 0 :(得分:0)

<?php if(!empty($_FILES)):?>
    <?php echo json_encode($_FILES);?>
<?php else:?>
    <!DOCTYPE HTML>
    <html>
        <head>
            <meta charset="utf-8">
            <title>jQuery File Upload Example</title>
            <link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap.min.css">
            <!-- Generic page styles -->

            <!-- Bootstrap styles for responsive website layout, supporting different screen sizes -->
            <link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap-responsive.min.css">
            <!-- Bootstrap CSS fixes for IE6 -->
            <!--[if lt IE 7]><link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap-ie6.min.css"><![endif]-->
            <!-- Bootstrap Image Gallery styles -->
            <link rel="stylesheet" href="http://blueimp.github.com/Bootstrap-Image-Gallery/css/bootstrap-image-gallery.min.css">
            <!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
            <link rel="stylesheet" href="css/jquery.fileupload-ui.css">
        </head>
        <body>
            <input  id="fileupload" type="file" name="files[]" multiple>
            <button id="sendFiles">Send</button>
            <ul id="fileList"></ul>   
            <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
            <script src="js/vendor/jquery.ui.widget.js"></script>
            <script src="js/jquery.iframe-transport.js"></script>
            <script src="js/jquery.fileupload.js"></script>
            <script src="js/jquery.fileupload-ui.js"></script>
            <script>
                $(function () {
                    var filesData;
                    $('#fileupload').fileupload({
                        dataType: 'json',
                        add: function (e, data) {
                            filesData = data;
                            $.each(data.files, function (index, file) {
                                $('<li/>').text(file.name).appendTo('#fileList');
                            });

                        },
                        done: function (e, data) {
                            console.log(data);
                        }

                    });

                    $('#sendFiles').on('click', function () {
                        if (filesData) {
                            filesData.submit();
                        }
                    });
                });
            </script>
        </body> 
    </html>
<?php endif;?>

基本上,您必须在函数submit中调用数据对象的方法add。然后,您将获得包含data的{​​{1}}对象作为json字符串。并且您不必使用实际表单通过此插件发送文件,但是您可以使用表单标记(就像在您的代码中)包装输入,以便允许没有JavaScript的用户(它们是否存在?:))也发送文件。 如果您不想通过JavaScript发送文件,那么为了显示文件列表,您不必使用该插件。您可以使用FileList https://developer.mozilla.org/en-US/docs/Web/API/FileList

获取有关文件的信息