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

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
主站蜘蛛池模板: 金溪县| 临夏县| 平邑县| 平安县| 罗平县| 杭锦后旗| 三门县| 周宁县| 永康市| 永吉县| 旅游| 石林| 郸城县| 秭归县| 桐乡市| 安塞县| 平远县| 江源县| 堆龙德庆县| 喀什市| 阳谷县| 伊宁市| 嵊泗县| 湄潭县| 塘沽区| 珠海市| 汽车| 甘德县| 湖州市| 阳江市| 曲水县| 肃宁县| 新建县| 远安县| 金川县| 永靖县| 乐东| 漠河县| 莱西市| 宜城市| 文登市|