只是想为拉斐尔的回答添加一些内容。$_FILES无论您是否使用JavaScript提交,以下是如何让PHP生成相同的内容。
HTML表单:
PHP $_FILES在没有JavaScript的情况下提交时生成:Array
(
[media] => Array
(
[name] => Array
(
[0] => Galata_Tower.jpg
[1] => 518f.jpg
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
)
[tmp_name] => Array
(
[0] => /tmp/phpIQaOYo
[1] => /tmp/phpJQaOYo
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 258004
[1] => 127884
)
)
)
如果你进行渐进增强,使用Raphael的JS提交文件......var data = new FormData($('input[name^="media"]')); jQuery.each($('input[name^="media"]')[0].files, function(i, file) {
data.append(i, file);});$.ajax({
type: ppiFormMethod,
data: data,
url: ppiFormActionURL,
cache: false,
contentType: false,
processData: false,
success: function(data){
alert(data);
}});
...这是PHP的$_FILES数组在使用JavaScript提交之后的样子:Array
(
[0] => Array
(
[name] => Galata_Tower.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpAQaOYo
[error] => 0
[size] => 258004
)
[1] => Array
(
[name] => 518f.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpBQaOYo
[error] => 0
[size] => 127884
)
)
这是一个很好的数组,实际上有些人会变换$_FILES,但我发现使用相同的数据是有用的$_FILES,无论JavaScript是否用于提交。所以,这里有一些JS的小改动:// match anything not a [ or ]regexp = /^[^[\]]+/;var fileInput = $('.putImages input[type="file"]');
var fileInputName = regexp.exec( fileInput.attr('name') );
// make files availablevar data = new FormData();
jQuery.each($(fileInput)[0].files, function(i, file) {
data.append(fileInputName+'['+i+']', file);});
(2017年4月14日编辑:我从FormData()的构造函数中删除了表单元素 - 在Safari中修复了此代码。)
那段代码做了两件事。input自动检索name属性,使HTML更易于维护。现在,只要form有类putImages,其他一切都会自动处理。也就是说,input不需要任何特殊名称。
普通HTML提交的数组格式由data.append行中的JavaScript重新创建。注意括号。
通过这些更改,现在使用JavaScript $_FILES提交与使用简单HTML提交的数组完全相同。