如何使用Spree Commerce REST API上传产品图像

时间:2014-03-10 21:23:22

标签: ruby-on-rails ruby spree

我必须将旧的eshop迁移到Spree上制作的新的eshop。它有很好的API来做到这一点。

但我坚持从远程服务器上传图片。以下是我在制作新产品时所做的事情:

require 'nokogiri'
require 'open-uri'
require 'curb'
require 'uri'

http = Curl.post("http://DOMAIN/api/products?product[name]=Test\
  &product[price]=123\
  &product[shipping_category_id]=1\
  &product[taxon_ids]=52\
  &product[sku]=020323232\
  &product[image]=http://www.computercloset.org/Altair_8800_and_Santa.jpg") do |http|
    http.headers['X-Spree-Token'] = 'd60ff5896cef2920d83f18c11b95ee1dff8d9c82d1480cbc'
end

除图像外,产品将保存所有参数。

我认为我的语法错误,但我无法找到关于在http://guides.spreecommerce.com/api/上传图片的示例或其他内容

3 个答案:

答案 0 :(得分:3)

您可能无法以这种方式创建图像。

您最好的选择是使用此未记录的API调用直接创建图像:

https://github.com/spree/spree/blob/v2.2.0/api/app/controllers/spree/api/images_controller.rb

从2.2.0开始,您可以指定以下参数: :alt,:attachment,:position,:viewable_type,:viewable_id

我希望你发现这不足以做你正在寻找的事情。特别是,您需要单独从此过程上传文件。这将只创建显示存储位置的图像记录(通过Paperclip)。指定您列出的完整网址可能不起作用。它必须是存储在Paperclip存储图像的位置的文件的文件名。

这不是理想的体验,这可能是此API调用未记录的原因。如果您能够修改它以使其更好地工作,您应该向Spree团队发送拉取请求。我相信他们很乐意收到它。

答案 1 :(得分:0)

是的,您可以将图像上传到产品,但需要单独调用API POST:/ api / v1 / products / 123 / images

curl -i -X POST -H "X-Spree-Token: secrettoken123" /
-H "Content-Type: multipart/form-data" /
-F "image[attachment]=@/home/user/asd.jpg" /
-F "type=image/jpeg" http://localhost:3000/api/v1/products/123/images 

答案 2 :(得分:0)

这里有一个使用api添加图像的示例https://github.com/spree-contrib/spree_api_examples/blob/master/examples/images/product_image_creation.rb

你需要导入他们的自定义spree api客户端才能使用它,但是一旦你拥有它就像它一样简单

    image = File.dirname(__FILE__) + '/filename.jpg'
    attachment = Faraday::UploadIO.new(image, 'image/jpeg')

    # Adding an image to a product's master variant
    response = client.post('/api/products/#{product_id}/images',
      {
        image: {
          attachment: attachment
        }
      }
    )