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