diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index c310087f7..ec0480c19 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -62,6 +62,16 @@ class AttachmentsController < ApplicationController render :action => 'file' end + def pdf?(file) + file.downcase.end_with?(".pdf") + end + + def direct_download + send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename), + :type => detect_content_type(@attachment), + :disposition => 'attachment' #inline can open in browser + end + def download # modify by nwb # 下载添加权限设置 @@ -69,20 +79,30 @@ class AttachmentsController < ApplicationController if candown || User.current.admin? || User.current.id == @attachment.author_id @attachment.increment_download if stale?(:etag => @attachment.digest) - convered_file = File.join(Rails.root, "files", "convered_office", @attachment.disk_filename + ".html") - if File.exist?(convered_file) - send_file convered_file, :type => 'text/html; charset=utf-8', :disposition => 'inline' + if params[:force] == 'true' + direct_download else - send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename), - :type => detect_content_type(@attachment), - :disposition => 'attachment' #inline can open in browser + convered_file = @attachment.diskfile + #如果本身不是pdf文件,则先寻找是不是已转换化,如果没有则转化 + unless pdf?(convered_file) + convered_file = File.join(Rails.root, "files", "convered_office", @attachment.disk_filename + ".pdf") + unless File.exist?(convered_file) + office = Trustie::Utils::Office.new(@attachment.diskfile) + office.conver(convered_file) + end + end + if File.exist?(convered_file) && pdf?(convered_file) + send_file convered_file, :type => 'application/pdf; charset=utf-8', :disposition => 'inline' + else + direct_download + end end end else render_403 :message => :notice_not_authorized end rescue => e - redirect_to "http: //" + (Setting.host_name.to_s) +"/file_not_found.html" + redirect_to "http://" + (Setting.host_name.to_s) +"/file_not_found.html" end #更新资源文件类型 diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 1e477ed04..f999e27d6 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -72,8 +72,8 @@ class Attachment < ActiveRecord::Base @@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails") before_save :files_to_final_location - after_create :office_conver, :be_user_score ,:act_as_forge_activity# user_score - after_update :be_user_score + after_create :office_conver, :be_user_score,:act_as_forge_activity# user_score + after_update :office_conver, :be_user_score after_destroy :delete_from_disk,:down_user_score # add by nwb @@ -259,12 +259,14 @@ class Attachment < ActiveRecord::Base end def office_conver - saved_path = File.join(Rails.root, "files", "convered_office") - unless Dir.exist?(saved_path) - Dir.mkdir(saved_path) - end - convered_file = File.join(saved_path, self.disk_filename + ".html") - OfficeConverTask.new.conver(self.diskfile, convered_file) + # 不在这里做后台转换,换为点击时做转换 + # return unless %w(Project Course).include? (self.container_type) + # saved_path = File.join(Rails.root, "files", "convered_office") + # unless Dir.exist?(saved_path) + # Dir.mkdir(saved_path) + # end + # convered_file = File.join(saved_path, self.disk_filename + ".pdf") + # OfficeConverTask.new.conver(self.diskfile, convered_file) end # Copies the temporary file to its final location diff --git a/app/views/files/_course_list.html.erb b/app/views/files/_course_list.html.erb index 043aea489..1d5684d31 100644 --- a/app/views/files/_course_list.html.erb +++ b/app/views/files/_course_list.html.erb @@ -31,15 +31,16 @@ <%= link_to("选入我的其他课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %> <% if delete_allowed && file.container_id == @course.id && file.container_type == "Course" %> - - <%= link_to (file.is_public? ? "公开":"私有"), update_file_dense_attachments_path(:attachmentid=>file.id,:newtype=>(file.is_public? ? 0:1)),:remote=>true,:class=>"f_l re_open c_blue",:method => :post %> - + + <%= link_to (file.is_public? ? "公开":"私有"), update_file_dense_attachments_path(:attachmentid=>file.id,:newtype=>(file.is_public? ? 0:1)),:remote=>true,:class=>"f_l re_open c_blue",:method => :post %> + <% else %> <% end %> <% else %> <%= link_to("选入我的课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %> <% end %> + <%= link_to '下载',download_named_attachment_path(file.id, file.filename, force: true),class: 'f_l re_open' %> <% else %> <% end %> @@ -65,4 +66,4 @@ -
\ No newline at end of file +
diff --git a/app/views/files/_project_file_list.html.erb b/app/views/files/_project_file_list.html.erb index 35aa36195..a5152ecdc 100644 --- a/app/views/files/_project_file_list.html.erb +++ b/app/views/files/_project_file_list.html.erb @@ -30,6 +30,7 @@ <% else %> <%= link_to(l(:label_slected_to_project),quote_resource_show_project_project_file_path(project,file),:class => "f_l re_select",:remote => true) if has_project?(User.current,file) %> <% end %> + <%= link_to '下载',download_named_attachment_path(file.id, file.filename, force: true),class: 'f_l re_open' %> <% end %>
@@ -37,7 +38,7 @@

文件大小:<%= number_to_human_size(file.filesize) %>

<%= link_to( l(:button_delete), attachment_path(file), :data => {:confirm => l(:text_are_you_sure)}, :method => :delete,:class => "f_r re_de") if manage_allowed && file.container_id == project.id && file.container_type == "Project"%> -

<%= time_tag(file.created_on).html_safe %><%= l(:label_bids_published_ago) %>  |  下载<%= file.downloads %>  |  引用<%= file.quotes.nil? ? 0:file.quotes %>

+

<%= time_tag(file.created_on).html_safe %><%= l(:label_bids_published_ago) %>  |  下载<%= file.downloads %>  |  引用<%= file.quotes.nil? ? 0:file.quotes %>

@@ -51,4 +52,4 @@ -
\ No newline at end of file +
diff --git a/app/views/memos/show.html.erb b/app/views/memos/show.html.erb index 5452aa893..05358c32a 100644 --- a/app/views/memos/show.html.erb +++ b/app/views/memos/show.html.erb @@ -131,9 +131,9 @@ <%= link_to image_tag(url_to_avatar(reply.author), :class => "avatar"), user_path(reply.author) %> -
- <%=h sanitize(reply.content.html_safe) %> -
+
+ <%=h sanitize(reply.content.html_safe) %> +

<% if reply.attachments.any?%> <% options = {:author => true, :deletable => reply.deleted_attach_able_by?(User.current) } %> @@ -183,4 +183,4 @@ }); }; $("img").removeAttr("align"); - \ No newline at end of file + diff --git a/config/additional_environment.rb b/config/additional_environment.rb deleted file mode 100644 index 5c73f6aab..000000000 --- a/config/additional_environment.rb +++ /dev/null @@ -1,3 +0,0 @@ -if Rails.env.production? - config.cache_store = :redis_store, 'redis://localhost:6379/0/cache', { expires_in: 90.minutes } -end \ No newline at end of file diff --git a/config/application.rb b/config/application.rb index 9e7a2ba81..83ba21b05 100644 --- a/config/application.rb +++ b/config/application.rb @@ -67,6 +67,8 @@ module RedmineApp # Do not include all helpers config.action_controller.include_all_helpers = false + config.action_view.sanitized_allowed_tags = 'div', 'p', 'span', 'img', 'embed' + if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb')) instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb')) end diff --git a/lib/tasks/office.rake b/lib/tasks/office.rake index 3e4c0a286..8bfc0c0ea 100644 --- a/lib/tasks/office.rake +++ b/lib/tasks/office.rake @@ -1,16 +1,18 @@ +#coding=utf-8 + namespace :office do desc "conver any files to html" task :conver => :environment do - all_count = Attachment.count + all_count = Attachment.where(["container_type IN (?)", %w(Project Course)]).count i = 0 - Attachment.find_each do |a| + Attachment.where(["container_type IN (?)", %w(Project Course)]).find_each do |a| i += 1 puts "process [#{i}/#{all_count}] => id #{a.id}" saved_path = File.join(Rails.root, "files", "convered_office") unless Dir.exist?(saved_path) Dir.mkdir(saved_path) end - convered_file = File.join(saved_path, a.disk_filename + ".html") + convered_file = File.join(saved_path, a.disk_filename + ".pdf") office = Trustie::Utils::Office.new(a.diskfile) if office.conver(convered_file) puts "process ok: #{convered_file} " diff --git a/lib/trustie/utils/office.rb b/lib/trustie/utils/office.rb index 1bc18cb84..2b4a5f1ac 100644 --- a/lib/trustie/utils/office.rb +++ b/lib/trustie/utils/office.rb @@ -1,3 +1,5 @@ +#coding=utf-8 + module Trustie module Utils class Office @@ -7,7 +9,7 @@ module Trustie end def office? - %w(doc docx ppt pptx xls xlsx pdf).any?{|word| @file.downcase.end_with?(word)} + %w(doc docx ppt pptx xls xlsx).any?{|word| @file.downcase.end_with?(word)} end def conver(saved_file, force=false) @@ -15,14 +17,18 @@ module Trustie if File.exist? @file if office? begin - resource = RestClient::Resource.new( - 'http://192.168.80.107/Any2HtmlHandler.ashx', - :timeout => -1, - :open_timeout => -1 - ) - req = resource.post :txtDes => File.new(@file, 'rb') - File.open(saved_file, "wb+") do |f| - f.write(req.body) + # resource = RestClient::Resource.new( + # 'http://192.168.80.107/Any2HtmlHandler.ashx', + # :timeout => -1, + # :open_timeout => -1 + # ) + # req = resource.post :txtDes => File.new(@file, 'rb') + req = RestClient.post 'http://192.168.80.107/Any2HtmlHandler.ashx',:txtDes => File.new(@file, 'rb') + File.delete(saved_file) if File.exist?(saved_file) + if req.body.length > 10 && !req.body.eql?('转换出错') + File.open(saved_file, "wb+") do |f| + f.write(req.body) + end end return true rescue =>e