修复:处理禅道图片函数

This commit is contained in:
yystopf 2024-09-13 13:48:26 +08:00
parent 4fbbe88ca9
commit 0d1ca7bc49
2 changed files with 92 additions and 71 deletions

View File

@ -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

View File

@ -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], "![](#{att_url})")
@ -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