3

我正在使用 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 变量。

4

1 回答 1

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包含$_FILES为 json 字符串的对象。而且您不必使用实际表单通过此插件发送文件,但是您可以使用表单标签(就像在您的代码中一样)包装输入,以允许没有 JavaScript 的用户(他们存在吗?:))也发送文件。如果您不想通过 JavaScript 发送文件,那么为了显示文件列表,您不必使用插件。您可以使用 FileList https://developer.mozilla.org/en-US/docs/Web/API/FileList获取有关文件的信息

于 2013-08-02T14:42:51.777 回答