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

Wordpress Image Upload Error - Specified file failed upload test

我已经尝试了几个小时来让它工作。

WP 图片上传适用于单张图片,无需使用 multiple 标签。

但在更改多张图片(数组)的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>

请帮忙。

如果 $_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

我 运行 今天遇到了同样的问题。接受的答案并不正确。如果您查看 wp-admin/includes/ 中有问题的函数 _wp_handle_upload,触发此错误的检查只是检查 is_uploaded_file - 文件是否存在。文件大小和类型的测试直到之后才会发生。所以不 - 如果您收到此消息,解决方案将不会更改这些参数。

当 $_FILES 数组从我的表单返回时,在我的 admin_post 操作中,我最终通过查看 $_FILES 数组来调试它。您设置表单的方式,我认为它与我的相同。 $_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 本身。但在紧要关头 - 它解决了我的问题。