# 代码溯源 导出pdf require 'open-uri' require 'fileutils' require 'zip' class Trace::PdfReportService < Trace::ClientService attr_accessor :token, :task_id def initialize(token, task_id) @token = token @task_id = task_id end def call content = open("#{domain}#{base_url}#{url}?task_id=#{task_id}", "Authorization" => token) if content.is_a?(Tempfile) check_file_path IO.copy_stream(content, "#{save_path}/report.zip") Zip::File.open("#{save_path}/report.zip") do |zip_file| zip_file.each do |f| name = f.name.force_encoding('utf-8') next unless name == '/report.pdf' fpath = File.join(save_path, name) zip_file.extract(f, fpath) end end return {code: 200, download_url: "/trace_task_results/#{task_id}/report.pdf"} else return {code: 404} end end private def check_file_path FileUtils.mkdir_p save_path end def save_path "public/trace_task_results/#{task_id}" end def url "/user/pdfreport".freeze end end