【问题标题】:Upload File to Wordpress with AJAX使用 AJAX 将文件上传到 Wordpress
【发布时间】:2015-01-09 02:23:15
【问题描述】:

所有, 我正在使用 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 代码(在我的示例中为 $filename)这样说: Index into the $_FILES array of the upload

如何成功使用 WP 上传此文件,使用 AJAX 向我传递 POST 变量而不是 $_FILES 变量?

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

这是文件输入:

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

【问题讨论】:

  • XHR2 允许通过 ajax 上传文件,就像您使用常规表单一样,尽管我假设您在某个时间点有一个 File/Blob 对象
  • @Musa 不确定那是什么。我确实在代码file = files[$file.data('index')]; 中看到了这一点
  • 它允许您上传文件而无需将它们转换为字符串,请参阅stackoverflow.com/questions/166221/…
  • @Musa 我放了一个 pastebin,显示了整个 JS 代码如何处理文件输入表单。

标签: php ajax wordpress


【解决方案1】:
<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 );
}

【讨论】:

  • 我尝试按照您说的做,但仍然得到零响应。我收到了Illegal offsettemp_name 错误,当我将文件输入更改为您拥有的名称并将我的 if 语句更改为您拥有的内容时,它没有在media_handle_upload 中输入并转到 else 语句错误处理。
  • 我已使用此代码在 wordpress 中上传图片,它的工作原理就是为什么我给你这个建议
  • 好的,谢谢。过去,当我可以提交表单并按照您的建议获取 $_FILES 值时,我已经让它工作了。然而,在这个例子中,我实际上并没有提交表单,所以它是如何被处理的,我不相信我可以直接访问 $_FILES 变量来这样做。
猜你喜欢
  • 2018-06-24
  • 2017-09-23
  • 2023-04-03
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 2018-06-08
相关资源
最近更新 更多