Cyb*_*ber 8 json ruby-on-rails binary-data paperclip ruby-on-rails-3
在我的Rails 3应用程序中,我有多个模型,每个模型都与另一个模型相关联.
User
模型
has_many :departments
accepts_nested_attributes_for :departments
Run Code Online (Sandbox Code Playgroud)
Department
模型
has_many :projects
accepts_nested_attributes_for :projects
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用JSON 通过邮递员REST客户端插入数据.我找到了一些格式,除了模型中有一个图像上传字段User
,我将用PaperClip
gem 处理.
通过我的rails视图它工作正常,但如何使用邮递员上传图像?
要通过REST客户端上传,我需要与我的图像等效的JSON格式.
有没有办法在json中嵌入图像所以我可以使用postman rest客户端?
kri*_*ard 17
什么是Base64
当您想要通过网络发送某些二进制数据时,通常不会通过以原始格式在线路上传输位和字节来实现.为什么?因为某些媒体是为流文本而制作的.你永远不会知道 - 有些协议可能会将你的二进制数据解释为控制字符(如调制解调器),或者你的二进制数据可能被搞砸了,因为底层协议可能认为你输入了一个特殊的字符组合(比如FTP如何转换行)结局).因此,为了解决这个问题,人们将二进制数据编码为字符.Base64是这些类型的编码之一.为什么64?因为您通常可以依赖于许多字符集中存在的相同64个字符,并且您可以合理地确信您的数据最终会在线路的另一端不受损坏.
- 取自什么是base 64编码?
因此,一种方法是在您的json请求中放置一个Base64字符串,并让您的应用程序对其进行解码.
# Your request
{
'user':{
# ....
'picture':'GIF89a\xB4\x00\x1F\x00\xE7\xFD....'
}
}
Run Code Online (Sandbox Code Playgroud)
这是你的模型可以做的
class User < ActiveRecord::Base
def convert_from_base64(image_data)
data = StringIO.new(Base64.decode64(image_data))
data.class.class_eval { attr_accessor :original_filename, :content_type }
tmp = Tempfile.new("base64")
tmp.write(data.read)
tmp.close
# only on *nix
data.content_type = IO.popen(["file", "--brief", "--mime-type",tmp.path],
in: :close, err: :close).read.chomp
data.original_filename = "picture." + data.content_type.split("/").last
data
end
end
# in your controller
def create
image_data = JSON.parse(params[:json])['user']['picture'] #or which ever field it is
params[:user][:picture] = @user.convert_from_base64(image_data)
# ....
end
Run Code Online (Sandbox Code Playgroud)
但是快速查看POSTMAN告诉我你必须对自己进行编码.
或者,
您可以只传递一个url而不是数据 - 如果url指向网络上可用的资源.
require "open-uri"
class User < ActiveRecord::Base
def picture_from_url(url)
self.picture = open(url)
end
end
# then just do
user.picture_from_url params[:user][:photo_url]
Run Code Online (Sandbox Code Playgroud)
Update
Postman实际上允许您构建附加图像的发布请求.不是你在找什么?
归档时间: |
|
查看次数: |
5252 次 |
最近记录: |