我必须将旧的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/上传图片的示例或其他内容
答案 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
}
}
)