WordPress图片上传错误-指定的文件上传测试失败

时间:2019-05-24 08:03:51

标签: wordpress image image-uploading

我已经尝试了几个小时才能使它正常工作。

在不使用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>

请帮助。

2 个答案:

答案 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