Simple-Stored基于CouchPotato的顶部,用于处理rails中的CouchDb。在尝试将文件上传到couchdb时,我们尝试使用base64,json post,似乎没有什么工作正常;我们正在尝试上传到已存储的文档的_attachments属性。
拥有这样的模型:
class Patient
include SimplyStored::Couch
end
并在控制器中通过更新操作
接收文件def update
@patient = Patient.find(params[:id])
if params[:patient][:_attachments]
attachement = params[:patient][:_attachments]
filedata = attachement.tempfile.read
data = Base64.encode64(filedata).gsub(/\n/, '')
type = attachement.content_type
or_name = attachement.original_filename
@patient._attachments = {or_name => {'data' => data, 'content_type' => type}}
@patient.save
return render :json => @patient._attachments
end
end
现在有趣的是,我可以看到@ patient._acttachments拥有文件本身,这就是在.save之后渲染中返回的内容。但它实际上并没有将它保存在couchdb数据库中。
任何想法为什么不进行保存或者我应该尝试将_attachment推送到couchdb数据库。 ? (顺便说一下总是返回500错误:()
答案 0 :(得分:3)
解决方案很简单,基于couchpotato网站,你实际上不需要将它转换为base64这里是代码工作的例子
if params[:patient][:_attachments]
attachement = params[:patient][:_attachments]
data = attachement.tempfile.read
type = attachement.content_type
or_name = attachement.original_filename
params[:patient][:_attachments] = {or_name => {'data' => data, 'content_type' => type}}
end
if @patient.update_attributes(params[:patient]) #blah blah blah
因为这些值在[:patient] [:_ attachments]参数中,所以您只需要将其作为另一个测试和工作的参数传递。
您还需要将患者模型定义为
property :_attachments
不知道是否需要,但我做到了。
我知道我不应该要钱,但因为我每工作四次,每小时只有100比索......在办公室见。
欢呼声
LOLS
答案 1 :(得分:0)
我不喜欢Ruby和couchpotato,但我认为你不需要Base64你的附件。只需读取二进制信息并将其写入请求即可。 我的2cents。 :)