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

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
主站蜘蛛池模板: 岚皋县| 台南市| 甘谷县| 苗栗县| 宜川县| 隆子县| 邵阳县| 修武县| 会昌县| 遂平县| 凤城市| 格尔木市| 大渡口区| 多伦县| 富蕴县| 枣阳市| 精河县| 德安县| 绍兴县| 奇台县| 惠安县| 平罗县| 灵寿县| 会同县| 尚志市| 阳新县| 丽江市| 沁源县| 长海县| 宝清县| 刚察县| 义乌市| 博客| 洛宁县| 呼玛县| 海原县| 宜丰县| 玛曲县| 原阳县| 正定县| 云龙县|