1

Simple-Stored 基于 CouchPotato 的顶部,用于在 rails 中处理 CouchDb。在尝试将文件上传到我们尝试使用 base64、json post 的 couchdb 时,似乎没有什么能正常工作;我们正在尝试上传到已存储文档的 _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 错误:()

4

2 回答 2

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 比索……办公室见

干杯

大声笑

于 2011-02-25T22:21:00.220 回答
0

我不知道 Ruby 和 couchpotato,但我认为您不需要对附件进行 Base64 处理。只需读取二进制信息并将其写入请求即可。我的 2 美分。:)

于 2011-02-25T19:58:23.210 回答