Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过JSON API通过HTTP发布文件附件_Ruby On Rails_Ruby_Json_Libcurl - Fatal编程技术网

Ruby on rails 通过JSON API通过HTTP发布文件附件

Ruby on rails 通过JSON API通过HTTP发布文件附件,ruby-on-rails,ruby,json,libcurl,Ruby On Rails,Ruby,Json,Libcurl,我有一个叫Book的模型,里面有很多照片(用回形针处理的文件附件) 我目前正在构建一个客户端,它将使用Paul Dix的gem(使用libcurl)通过JSON与我的Rails应用程序通信 发布一个新的图书对象很容易。要创建标题为“Hello There”的新图书记录,我可以做如下简单的事情: require 'rubygems' require 'json' require 'typhoeus' class Remote include Typhoeus end p Remote.po

我有一个叫Book的模型,里面有很多照片(用回形针处理的文件附件)

我目前正在构建一个客户端,它将使用Paul Dix的gem(使用libcurl)通过JSON与我的Rails应用程序通信

发布一个新的图书对象很容易。要创建标题为“Hello There”的新图书记录,我可以做如下简单的事情:

require 'rubygems'
require 'json'
require 'typhoeus'

class Remote
  include Typhoeus
end

p Remote.post("http://localhost:3000/books.json",
  { :params =>
    { :book => { :title => "Hello There" }}})
当我尝试将照片添加到此查询时,问题就开始了。只需通过HTML表单发布文件附件即可创建如下查询:

 Parameters: {"commit"=>"Submit", "action"=>"create", "controller"=>"books", "book"=>{"title"=>"Hello There", "photo_attributes"=>[{"image"=>#<File:/var/folders/1V/1V8Kw+LEHUCKonqJ-dp3oE+++TI/-Tmp-/RackMultipart20090917-3026-i6d6b9-0>}]}}
但这似乎将我试图将其转换为散列的内容连接成一个字符串,并返回(无论我在:image=>“”散列中做了什么):

但我也不想浪费太多的时间来弄清楚我的语法到底出了什么问题,如果这不管用的话,我想我应该来这里

我的问题是: 我的思路正确吗?如果我清除此语法以发布散列数组而不是奇怪的连接字符串,这是否足以将图像传递到Book对象中


还是我的做法不对?

事实上,您不能通过xhr发布文件,javascript中有一个安全预防措施,可以防止它处理任何文件。解决这个问题的诀窍是将文件发布到一个隐藏的iframe,iframe会定期发布到服务器,从而避免整个页面的刷新。这项技术在几个地方都有详细介绍,可能尝试一下这个(他们使用的是php,但原理是一样的,并且有一个很长的讨论,这很有帮助):


这是一个非常有趣的观点,但是该客户端不是基于浏览器的应用程序,因此很遗憾,iframe是不可能的。
p Remote.post("http://localhost:3000/books.json", 
  { :params => 
    { :book => { :title => "Hello There",
                 :photo_attributes => [{ :image => "/path/to/image/here" }] }}})
NoMethodError (undefined method `stringify_keys!' for "image/path/to/image/here":String):