【问题标题】:Uploading file to wordpress via xml-rpc and javascript通过 xml-rpc 和 javascript 将文件上传到 wordpress
【发布时间】:2013-07-15 07:43:48
【问题描述】:

我正在尝试编写一个可以将图片上传到 wordpress 博客的 chrome 扩展程序。到目前为止,一切都很好,但是 wordpress rpc api 期待二进制图片:

http://codex.wordpress.org/XML-RPC_WordPress_API/Media#wp.uploadFile

不幸的是,我拥有的数据是 base64 编码的

http://developer.chrome.com/extensions/tabs.html#method-captureVisibleTab

在触发我的代码时,我从 Wordpress 得到的唯一反馈是:faultCode -32700, parse error. not well formed

就是这样:

chrome.tabs.captureVisibleTab(null, {"format": "png"}, function(img) {

    var data = new Object();
    data.name = 'Screenshot' + Math.floor(Math.random() * 100); //pageTitle 
    data.overwrite = false;
    data.type = 'image/png'; //string:File MIME type.

    //transfrom screencapture into binary data for wordpress xmlrpc
    var regex = /^data:.+\/(.+);base64,(.*)$/;
    var matches = img.match(regex);
    data.bits = atob(matches[2]); //string: binary data. Shouldn't be base64-encoded.

    $.xmlrpc({
        url: wp.url,
        methodName: 'wp.uploadFile',
        params: [0, wp.user, wp.password, data],
        success: function(response, status, jqXHR) { 
            //this return the post id
            alert("worked :-)" + status + "/" + response + "/" +
                  jqXHR.responseXML + "/" + response.url); 
        },
        error: function(jqXHR, status, error) { 
            alert("fail :-(" + status + " " + error + " " + jqXHR.responseXML); 
        }
    });
});

你知道我怎样才能让它工作吗?谢谢一百万!

【问题讨论】:

  • 我用 FormData 对象交换了数据对象,就像这样,但是 jquery 的 xml-rpc 插件告诉我,它是一个未知类型。 var data = new FormData(); data.append('bits', img); 你能给我指一个教程、例子或者更具体一点关于在 xml-rpc 中使用 formData 吗?谢谢!
  • 它是一个普通的 ajax 选项,html5rocks.com/en/tutorials/file/xhr2。我已经好几年没见过 xmlrpc 了,也从来没有使用过这个插件。如果您要发送 xml,那么我想您可能无法使用它。您可以随时将其与其他内容分开上传; ajax 可以让很多球保持在空中......尽管如此,即使你拥有它,你应该能够在“,”上分割服务器上的 base64 文件数据,获取段 1,然后 decode64(seg1) 得到二进制数据。无论如何,您必须对数据进行 de-base64 处理才能使用 FormData,这只是您想在哪里做的问题:正面还是背面......

标签: javascript jquery wordpress base64 xml-rpc


【解决方案1】:

几个小时后,我终于弄明白了。对于任何有类似问题的人。

  1. github 上有一个很棒的用于 Wordpress XML RPC 的 Javascript 库,它可以完成所有的魔法并附带大量的示例 rpc。可以在以下位置找到:http://github.com/developerworks/wordpress-xmlrpc-javascript-api

  2. 在图书馆的帮助下上传图片毕竟没什么大不了的。

首先你要解码 dataURL,你从 Chrome 获得

var imageData = new Base64(atob(dataURL.split(',')[1]));

然后,上传...

var imageUpload = wp.uploadFile(1, {
    name: 'filename.png', 
    type: 'image/png', 
    bits: imageData,    
    overwrite: true
});

【讨论】:

  • 嘿,我失败了 :(什么是新的 Base64?请帮助我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 2013-02-08
  • 1970-01-01
  • 2012-02-25
相关资源
最近更新 更多