官术网_书友最值得收藏!

How to do it...

  1. Open the service object we created in the previous recipe. We'll modify the service object to be able to call an external microservice responsible for managing attachments. For the sake of simplicity, we'll use an HTTP client that is provided in the Ruby standard library. The service object should be in the app/services/attachments_service.rb file:
class AttachmentsService

BASE_URI = "http://attachment-service.yourorg.example.com/"

def upload(message_id, user_id, file_name, data, media_type)
body = {
user_id: user_id,
file_name: file_name,
data: StringIO.new(Base64.decode64(params[:file]
[:data]), 'rb'),
message: message_id,
media_type: media_type
}.to_json
uri = URI("#{BASE_URI}attachment")
headers = { "Content-Type" => "application/json" }
Net::HTTP.post(uri, body, headers)
end

end
  1. Open the attachments_controller.rb file, located in pichat/app/controllers/, and look at the following create action. Because of the refactoring work done in the previous chapter, we require only a small change to make the controller work with our new service object:
class AttachmentsController < ApplicationController
# POST /messages/:message_id/attachments
def create
service = AttachmentService.new
response = service.upload(params[:message_id], current_user.id,
params[:file][:name], params[:file][:data],
params[:media_type])
json_response(response.body, response.code)
end
# ...
end
主站蜘蛛池模板: 格尔木市| 陕西省| 宁陕县| 彩票| 铜鼓县| 海兴县| 新丰县| 余庆县| 洛浦县| 时尚| 玉田县| 九龙县| 会理县| 乐平市| 玛多县| 罗甸县| 海阳市| 高碑店市| 德格县| 紫云| 济宁市| 富阳市| 寿宁县| 亚东县| 济宁市| 赤峰市| 巴彦县| 蓝山县| 龙州县| 武平县| 行唐县| 麻栗坡县| 巴彦县| 开远市| 花莲县| 万源市| 阿坝| 新蔡县| 平顺县| 志丹县| 长兴县|