使用AJAX将文件上传到Wordpress

时间:2015-01-09 02:23:16

标签: php ajax wordpress

全部, 我正在使用HTML5上传器上传一些图片。这是将数据发送到我的PHP处理脚本的文件的一部分:

var ajax    = $.ajax({
    url:        ajaxurl,
    //dataType:     options.ajaxDataType || 'json',
    type:       options.ajaxType || 'POST',
    cache:      false,
    data:       { name: $file.data('filename'), filename: $file.data('file'), file: evt.target.result, data: options.data, action: 'test_upload' },
    headers:    options.ajaxHeaders,

从上传者他们使用以下代码处理文件上传:

if (!empty($_POST)) {
    $error                  = false;
    $absolutedir            = dirname(__FILE__);
    $dir                    = '/tmp/';
    $serverdir              = $absolutedir.$dir;
    $tmp                    = explode(',',$_POST['file']);
    $file                   = base64_decode($tmp[1]);
    $extension              = strtolower(end(explode('.',$_POST['filename'])));
    $filename               = $_POST['name'].'.'.$extension;
    //$filename             = $file.'.'.substr(sha1(time()),0,6).'.'.$extension;
    $handle                 = fopen($serverdir.$filename,'w');
    fwrite($handle, $file);
    fclose($handle);
    $response = array(
            "result"        => true,
            "url"           => $dir.$filename.'?'.time(), //added the time to force update when editting multiple times
            "filename"      => $filename
    );
    echo json_encode($response);
    //echo json_encode(array('result'=>true));
}

但是,我希望Wordpress能够处理我的文件上传,所以我尝试使用以下函数来处理文件上传:

function test_upload()
{
    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
    require_once(ABSPATH . "wp-admin" . '/includes/media.php');

    $filename = $_POST['filename']; 
    $attachment_id = media_handle_upload( $filename, '1' );
    print_r($attachment_id);

}

我正在尝试传递文件名,因为第一个参数的media_handle_upload codex(在我的示例$filename中)说明了这一点: Index into the $_FILES array of the upload

如何使用AJ成功使用WP上传此文件来传递POST变量而不是$ _FILES变量?

编辑:当我这样做的时候,我得到一个WP_ERROR,说文件是空的。我创建了一个带有JS代码的pastebin来处理文件处理表单,以便您可以看到文件名的来源。 http://pastebin.com/Shc4KqX1

这是文件输入:

<input type="file" name="file" />

1 个答案:

答案 0 :(得分:0)

<input id="uploadBtn" type="file" class="upload" name="pimage">

功能media_handle_upload在wordpress中上传您的图片

使用$filename = $_POST['filename']['temp_name'];而不是$filename = $_POST['filename'];

if ( !empty( $_FILES["pimage"]["name"] ) ) {
    $attachment_id = media_handle_upload( 'pimage', 0 );
}