修复:处理禅道图片函数
This commit is contained in:
parent
4fbbe88ca9
commit
0d1ca7bc49
|
@ -76,6 +76,42 @@ class Attachment < ApplicationRecord
|
|||
|
||||
DCODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z)
|
||||
|
||||
def self.build_from_remote_url(user, name, url, container=nil)
|
||||
ext = name.split('.')[-1]
|
||||
tmp_path = "#{Rails.root}/#{name}"
|
||||
uri = URI(url)
|
||||
size = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
||||
response = http.get(uri.path)
|
||||
File.open(tmp_path, 'wb') do |file|
|
||||
file.write(response.body)
|
||||
end
|
||||
end
|
||||
digest = "#{Digest::MD5.file(tmp_path).hexdigest}_#{(Time.now.to_f * 1000).to_i}.#{ext}"
|
||||
month_folder = "#{Time.now.year}/#{Time.now.month.to_s.rjust(2, '0')}"
|
||||
save_path = "#{Rails.root}#{EduSetting.get("attachment_folder")}#{month_folder}"
|
||||
unless Dir.exists?(save_path)
|
||||
FileUtils.mkdir_p(save_path) ##不成功这里会抛异常
|
||||
end
|
||||
path = File.join(save_path, digest)
|
||||
FileUtils.mv(tmp_path, path)
|
||||
attachment = Attachment.new
|
||||
attachment.filename = name
|
||||
attachment.disk_filename = path[save_path.size+1, path.size]
|
||||
attachment.filesize = size
|
||||
attachment.content_type = 'application/octet-stream'
|
||||
attachment.digest = digest.split('.')[0]
|
||||
attachment.author_id = user.id
|
||||
attachment.disk_directory = month_folder
|
||||
attachment.cloud_url = url
|
||||
attachment.uuid = SecureRandom.uuid
|
||||
attachment.container = container
|
||||
attachment.save!
|
||||
|
||||
return attachment
|
||||
rescue
|
||||
return nil
|
||||
end
|
||||
|
||||
def diskfile
|
||||
File.join(File.join(Rails.root, "files"), disk_directory.to_s, disk_filename.to_s)
|
||||
end
|
||||
|
|
|
@ -23,38 +23,23 @@ namespace :import_from_chandao do
|
|||
return nil
|
||||
end
|
||||
|
||||
def get_chandao_json(api_url)
|
||||
url = URI("#{EduSetting.get("chandao_server_url")}#{api_url}")
|
||||
http = Net::HTTP.new(url.host, url.port);
|
||||
request = Net::HTTP::Post.new(url)
|
||||
request["Cookie"] = "zentaosid=#{EduSetting.get("chandao_sid")}"
|
||||
response = http.request(request)
|
||||
response.read_body
|
||||
return JSON.parse(JSON.parse(response.read_body)['data'])
|
||||
rescue
|
||||
return {}
|
||||
end
|
||||
|
||||
def trans_content_img(content, user)
|
||||
respace_content_arr = content.to_s.scan(/<img\s+[^>]*?src=[“.*?“][^>]*?\/?>/).map{|s|[s,s.match(/(\d+\.\w+)/)[0].split(".")[0],s.match(/(\d+\.\w+)/)[0].split(".")[1]]}
|
||||
respace_content_arr.each do |img|
|
||||
remote_image_url = "#{EduSetting.get("chandao_server_url")}/file-read-#{img[1]}.json"
|
||||
tmp_local_image_path = "#{Rails.root}/#{img[1..2].join(".")}"
|
||||
uri = URI(remote_image_url)
|
||||
size = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
||||
response = http.get(uri.path)
|
||||
File.open(tmp_local_image_path, 'wb') do |file|
|
||||
file.write(response.body)
|
||||
end
|
||||
end
|
||||
digest = "#{Digest::MD5.file(tmp_local_image_path).hexdigest}_#{(Time.now.to_f * 1000).to_i}.#{img[2]}"
|
||||
month_folder = "#{Time.now.year}/#{Time.now.month.to_s.rjust(2, '0')}"
|
||||
save_path = "#{Rails.root}#{EduSetting.get("attachment_folder")}#{month_folder}"
|
||||
unless Dir.exists?(save_path)
|
||||
FileUtils.mkdir_p(save_path) ##不成功这里会抛异常
|
||||
end
|
||||
|
||||
local_image_path = File.join(save_path, digest)
|
||||
FileUtils.mv(tmp_local_image_path, local_image_path)
|
||||
attachment = Attachment.new
|
||||
attachment.filename = img[1..2].join(".")
|
||||
attachment.disk_filename = local_image_path[save_path.size+1, local_image_path.size]
|
||||
attachment.filesize = size
|
||||
attachment.content_type = img[2]
|
||||
attachment.digest = digest
|
||||
attachment.author_id = user.id
|
||||
attachment.disk_directory = month_folder
|
||||
attachment.cloud_url = remote_image_url
|
||||
attachment.uuid = SecureRandom.uuid
|
||||
attachment.save
|
||||
attachment = Attachment.build_from_remote_url(user, img[1..2].join("."), remote_image_url)
|
||||
|
||||
att_url = "#{Rails.application.config_for(:configuration)['platform_url']}/api/attachments/#{attachment.uuid}"
|
||||
content.gsub!(img[0], "")
|
||||
|
@ -89,7 +74,7 @@ namespace :import_from_chandao do
|
|||
issue.project_issues_index = randd_field_hash['Bug编号'].to_i
|
||||
issue.status_id = trans_status(randd_field_hash['Bug状态']) || IssueStatus.first.id
|
||||
issue.tracker_id = Tracker.first.id
|
||||
issue.priority_id = randd_field_hash['优先级'].to_i
|
||||
issue.priority_id = randd_field_hash['优先级'].split('P')[-1].to_i rescue 1
|
||||
issue.subject = randd_field_hash['Bug标题']
|
||||
issue.description = trans_content_img(randd_field_hash['重现步骤'].to_s, author)
|
||||
issue.created_on = randd_field_hash['创建日期'].to_time rescue nil
|
||||
|
|
Loading…
Reference in New Issue