Как принять файл PUT multipart в webmachine-ruby

Я пытаюсь загрузить файл на webmachineресурс с помощью PUT. Идея состоит в том, чтобы обновить ресурс шаблона с a file_id.

module App::Resources
  class UpdateTemplateResource < TemplateResource

    def allowed_methods
      %W(PUT)
    end

    def content_types_accepted
      # What to do here?
    end

    private

    def template_id
      request.path_info[:id]
    end

    def template
      @template ||= ::App::Models::Template.find_latest_version_by_guid(id)
    end
  end
end

Я нашел примеры, чтобы принять запрос типа json, но не составной. Файл не сохраняется на сервере, а преобразуется и отправляется в другую службу для хранения.

1 ответ

  1. Webmachine::RequestОбъект имеет включенное тело, которое по существу является составным запросом с границами. Если мы знаем, какой тип файла отправляется, мы могли бы проанализировать его.

    Граница тела включает тип контента, имя файла и связанный с ним param. Затем запускается фактический файл.

    Если JSON

    lines = []
    request.body.to_io.each {|l| lines << l if l =~ /\[/ }
    json = JSON.parse(lines[0])
    

    Если pdf-файл

    lines = request.body.to_io.read
    pdf_as_string = lines.match(/^(\%PDF-)(.*\s)*(\%\%EOF\s)$/)[0]