【问题标题】:Unable to upload images from Ruby to Wordpress using XMLRPC - damaged image无法使用 XMLRPC 将图像从 Ruby 上传到 Wordpress - 图像损坏
【发布时间】:2016-03-05 21:04:55
【问题描述】:

我正在使用一个名为 ruby​​press 的 gem,使用 XMLRPC 将内容从 ruby​​ 发布到 wordpress。除图像上传部分外,一切正常。我将图像转换为 base64 编码格式,但在上传后,我得到的只是一张灰色图像,而不是我打算上传的图像(我使用大约 100kb 大小的较小图像来上传进行测试)。我在做什么错? 以下是来自 ruby​​press github 页面(https://github.com/zachfeldman/rubypress) 的上传代码:

FILENAME='myFile.png'
wp.uploadFile(:data => {
    :name => FILENAME,
    :type => MIME::Types.type_for(FILENAME).first.to_s,
    :bits => XMLRPC::Base64.new(IO.read(FILENAME))
    })

【问题讨论】:

    标签: ruby wordpress


    【解决方案1】:

    试试:

    wp.uploadFile(:data => {:name => File.basename(FILENAME),
                       :type => MIME::Types.type_for(FILENAME).first.to_s,
                       :bits => XMLRPC::Base64.new(File.open(FILENAME).read)
    })
    

    【讨论】:

    • 谢谢迈克,我试过了,但还是一样。我得到一个灰色的无效图像。这与我使用的 ruby​​ 版本有关吗?我正在使用 2.1.0
    • 为了安全起见,您是否尝试过在上传之前显示图像?关于特定版本的 Ruby,您是否安装了 RVM?你可以自己试试。 PS。不要使用管理员权限(它违背了目的)。在你的主目录中安装 RVM。
    • 嗨,迈克,是的,它是一张有效的图片。当我尝试使用使用 xmlrpc 上传到 wordpress 的简单 php 脚本时,它可以工作。我正在使用RailFTW,它是一个 Rails 安装程序。我将尝试 RVM,但我认为问题可能与 ruby​​ 版本无关。我也试过:bits=>Base64.strict_encode64(IO.binread(FILENAME)),但它是一样的。你认为这可能是由于我的特定 ruby​​ 版本造成的吗?
    • 你安装了哪个 gem xml-rpc?哪个版本的宝石?当然,某些版本的 xml-rpc 可以与 Ruby 2.1 一起使用。查看各种 xml-rpc gems,最新版本都没有指定所需的 Ruby 版本。
    • Ruby 2.1.0 本身包含模块XMLRPC
    【解决方案2】:

    我终于能够通过如下更改Base64编码代码来解决它:

    $wp.uploadFile(:data => {
        :name => File.basename(imgname),
        :type => MIME::Types.type_for(imgname).first.to_s,
        :bits => XMLRPC::Base64.new(File.open(FILENAME,"rb").read),
        :post_id =>postid
    
        })
    

    该文件显然需要先“打开”而不是使用 IO.read(FILENAME) 读取。

    【讨论】:

      【解决方案3】:

      这是我的做法,效果很好:

      image = MiniMagick::Image.open(this_image.path)
      image.format('jpg')
      image.combine_options do |c|
        c.strip
      end
      image.write(this_image.path)
      
      # most efficient resize as suggested by https://www.smashingmagazine.com/2015/06/efficient-image-resizing-with-imagemagick/
      MiniMagick::Tool::Mogrify.new do |mogrify|
        mogrify.filter('Triangle')
        mogrify.define('filter:support=2')
        mogrify.thumbnail('960x')
        mogrify.unsharp('0.25x0.08+8.3+0.045')
        mogrify.dither('None')
        mogrify.posterize('136')
        mogrify.quality('82')
        mogrify.define('jpeg:fancy-upsampling=off')
        mogrify.interlace('none')
        mogrify.colorspace('sRGB')
        mogrify << this_image.path
      end
      
      
      type = image.mime_type
      bits = XMLRPC::Base64.new(IO.read(this_image.path))
      
      begin
        result = wp.uploadFile(
                 data: {
                     name: image_name,
                     type: type,
                     bits: bits,
                     post_id: post_id,
                     overwrite: true
                 })
      rescue StandardError => e 
        puts e
      end
      

      【讨论】:

        猜你喜欢
        • 2017-11-25
        • 1970-01-01
        • 1970-01-01
        • 2017-12-07
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 2020-01-09
        • 2016-04-14
        相关资源
        最近更新 更多