Загрузка бинарного файла Rails + CouchDb в базу данных - PullRequest
1 голос
/ 25 февраля 2011

Simple-Stored основан на CouchPotato для обработки 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 :()

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

решение очень простое, на основе веб-сайта 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

, так как значения находятся в [:Пациент] [: _ attachments] params, вам просто нужно передать его как другой протестированный и работающий param.

Также вам нужно определить модель вашего пациента как

    property :_attachments

Не знаю, если это требуетсяно я сделал это.

Я знаю, что не должен просить денег, но, поскольку Я РАБОТАЮ ЧЕТЫРЕ, это всего лишь 100 песо / час .. Увидимся в офисе

ура

Lols

0 голосов
/ 25 февраля 2011

Я не знаю о Ruby и couchpotato, но я не думаю, что вам нужно Base64 ваше приложение.Просто прочитайте двоичную информацию и напишите ее для запроса.мои 2цента.:)

...