我已经尝试了几个小时才能使它正常工作。
在不使用multiple
标记的情况下,WP图像上载可以很好地用于单个图像。
但是当更改多个图像(数组)的php代码并添加multiple
标签后尝试上传多个图像时,显示错误:
文件上传数据通过JSON传输,在打印时效果很好。
以下是我到目前为止尝试过的内容:
if(!function_exists('wp_handle_upload')){
require_once(ABSPATH.'wp-admin/includes/file.php');
}
foreach($styledNameData as $nameData){
//echo '<pre>'; print_r($nameData);
// It Prints
//Array
//(
// [name] => A_Front.png
// [type] => image/png
// [tmp_name] => C:\\xampp\\tmp\\php5BFB.tmp
// [error] => 0
// [size] => 32901
//)
$upload_overrides = array('test_form' => false);
$movefile = wp_handle_upload($nameData, $upload_overrides);
}
if($movefile && !isset($movefile['error'])){
echo '<pre>';
print_r($movefile);
} else {
echo '<pre>';
print_r($movefile['error']);
}
HTML是:
<form id="imagesForm" method="POST" enctype="multipart/form-data" action="<?php echo admin_url('admin-ajax.php'); ?>">
<input id="uploadfile" type="file" class="button button-secondary" name="uploadfile[]" multiple />
<input type="hidden" name="action" value="shpg_image_upload" />
<input type="submit" id="uploadImages" name="uploadImages" class="btn-medium col-sms-5 col-sm-3" value="UPLOAD" />
</form>
请帮助。
答案 0 :(得分:1)
我今天遇到了同样的问题。接受的答案不是真的正确。如果您在问题_wp_handle_upload的函数中查看wp-admin / includes /,则触发此错误的检查仅是对is_uploaded_file的检查-该文件是否存在。直到之后,才进行文件大小和类型的测试。因此,不-如果您收到此消息,解决方案将不会更改这些参数。
最后,我通过查看$ _FILES数组从表单返回时在admin_post动作中进行了调试。我假设您的表单设置方式与我的相同。 $ _FILES数组的格式不符合此处的预期格式,并且因为wp_handle_upload正在传递给$ _FILES数组的索引-如果您将其转储出去,则在代码中此错误触发的位置的$ file变量为NULL( file.php:808)。
我的$ _FILES数组看起来像这样:
array(1) {
["field_name"]=> array(5) {
["name"]=> array(2) {
[0]=>string(10) "1.png"
[1]=>string(10) "2.png"
}
["type"]=> array(2) {
[0]=>string(9) "image/png"
[1]=>string(9) "image/png"
}
["tmp_name"]=> array(2) {
[0]=>string(26) "/private/var/tmp/phpgg1rgH"
[1]=>string(26) "/private/var/tmp/phpMe907s"
}
["error"]=> array(2) {
[0]=>int(0)
[1]=>int(0)
}
["size"]=> array(2) {
[0]=>int(928815)
[1]=>int(871340)
}
}
}
因此,如您所见,每个文件的属性首先是由属性而不是文件索引分解的。现在,如果您像这样更改文件数组的结构:
$images = [];
foreach( $_FILES[ 'field_name' ] as $prop => $values ){
foreach( $values as $key => $value ){
$images[ $key ][ $prop ] = $value;
}
}
$_FILES = $images;
在调用wp_handle_upload()之前-一切都应按预期工作。无论如何,这都是我的问题-不确定是否有更好的方法来解决该错误。我必须认为这可以在表单级别以某种方式解决,而不是覆盖$ _FILES本身。但紧要关头-它解决了我的问题。
答案 1 :(得分:0)
如果$ _FILES数组为空,通常会发生这种情况。 $ _FILES数组可能为空,这有几个不同的原因,并且经常是因为需要更改以下服务器设置之一。
file_uploads=Off <--- Set this to On
post_max_size=8M <-- increase this to be larger than your image
upload_max_filesize=2M <-- increase this to be larger than your image