From f2ab9f6a2866a88c24725f1a0a4e71829679f67f Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 11:14:33 +0800 Subject: [PATCH] =?UTF-8?q?gitea=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 45 +++++++++++++++-------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index c824b6ce3..7a855871c 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -32,23 +32,38 @@ class AttachmentsController < ApplicationController def get_file normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s - if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") - domain = GiteaService.gitea_config[:domain] - api_url = GiteaService.gitea_config[:base_url] - url = ("/repos"+url.split(base_url + "/api")[1]) - filepath, ref = url.split("/")[-1].split("?") - url.gsub!(url.split("/")[-1], '') - Rails.logger.info("url===#{url}") - Rails.logger.info(filepath) - request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join - Rails.logger.info("request_url===#{request_url}") - response = Faraday.get(request_url) - filename = filepath + md5_file = Base64.strict_encode64(params[:download_url]) + tmp_path = "#{Rails.root}/public/files/#{Time.now.strftime('%Y%m%d%')}-#{md5_file}" + cache_key ="get_file:#{Time.now.strftime('%Y%m%d%')}:#{md5_file}" + value = Rails.cache.read(cache_key) + if value.to_i >= 5 && File.exist?(tmp_path) + send_data(tmp_path, filename: filename, type: "application/octet-stream", disposition: 'attachment') else - response = Faraday.get(URI.encode(url)) - filename = params[:download_url].to_s.split("/").pop() + if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") + domain = GiteaService.gitea_config[:domain] + api_url = GiteaService.gitea_config[:base_url] + url = ("/repos"+url.split(base_url + "/api")[1]) + filepath, ref = url.split("/")[-1].split("?") + url.gsub!(url.split("/")[-1], '') + Rails.logger.info("url===#{url}") + Rails.logger.info(filepath) + request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join + Rails.logger.info("request_url===#{request_url}") + response = Faraday.get(request_url) + filename = filepath + else + response = Faraday.get(URI.encode(url)) + filename = params[:download_url].to_s.split("/").pop() + end + if value.to_i == 0 + File.open(tmp_path, 'wb') do |file| + file.write(response.body) + end + end + value = value.to_i + 1 + Rails.cache.write(cache_key, value, expires_in: 1.day) + send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') end - send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') end def create