Merge branch 'szzh' into develop

This commit is contained in:
sw 2015-06-05 09:22:21 +08:00
commit e4b4f640a3
9 changed files with 71 additions and 40 deletions

View File

@ -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
#更新资源文件类型

View File

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

View File

@ -40,6 +40,7 @@
<% 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 %>
</div>

View File

@ -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 %>
</div>
<div class="cl"></div>

View File

@ -1,3 +0,0 @@
if Rails.env.production?
config.cache_store = :redis_store, 'redis://localhost:6379/0/cache', { expires_in: 90.minutes }
end

View File

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

View File

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

View File

@ -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,15 +17,19 @@ 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')
# 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
puts e.message