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