【问题标题】:Wordpress Image Upload Error - Specified file failed upload testWordpress 图片上传错误 - 指定文件上传测试失败
【发布时间】:2019-10-10 19:12:18
【问题描述】:

我已经尝试了好几个小时才能让它工作。

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

请帮忙。

【问题讨论】:

  • 你解决了这个问题吗?

标签: wordpress image image-uploading


【解决方案1】:

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

我最终通过查看 $_FILES 数组来调试它,当它从我的表单返回时,在我的 admin_post 操作中。您设置表单的方式,我认为它与我的相同。 $_FILES 数组不是此处预期的格式,并且因为 wp_handle_upload 正在将索引传递给 $_FILES 数组 - 如果您将其转储出去,则代码中触发此错误的 $file 变量为 NULL(文件.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)
    }
  }
}

所以你可以看到每个文件的属性首先被属性分解 - 而不是文件索引。现在,如果您像这样更改 files 数组的结构:

$images = [];
foreach( $_FILES[ 'field_name' ] as $prop => $values ){
    foreach( $values as $key => $value ){
        $images[ $key ][ $prop ] = $value;
    }
}
$_FILES = $images;

在你调用 wp_handle_upload() 之前 - 一切都应该像你期望的那样工作。无论如何,那是我的问题-不确定是否有更好的方法来解决该错误。我不得不认为这可以在表单级别以某种方式解决,而不是覆盖 $_FILES 本身。但在紧要关头 - 它解决了我的问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 2020-03-09
      • 2014-10-25
      • 2020-12-30
      • 2013-09-02
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2019-10-21
      相关资源
      最近更新 更多