|
- # 代码溯源 导出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
|