Merge branch 'develop' of 10.0.47.245:/home/trustie2 into develop
This commit is contained in:
commit
4e567afd0a
|
@ -1,68 +1,115 @@
|
||||||
class ZipdownController < ApplicationController
|
class ZipdownController < ApplicationController
|
||||||
|
SAVE_FOLDER = "#{Rails.root}/files"
|
||||||
|
OUTPUT_FOLDER = "#{Rails.root}/tmp/archiveZip"
|
||||||
|
|
||||||
def assort
|
def assort
|
||||||
obj_class = params[:obj_class]
|
obj_class = params[:obj_class]
|
||||||
obj_id = params[:obj_id]
|
obj_id = params[:obj_id]
|
||||||
obj = obj_class.constantize.find(obj_id)
|
obj = obj_class.constantize.find(obj_id)
|
||||||
|
zipfile = nil
|
||||||
case obj.class.to_s.to_sym
|
case obj.class.to_s.to_sym
|
||||||
when :Bid
|
when :Bid
|
||||||
zip obj
|
zipfile = zip_bid obj
|
||||||
else
|
else
|
||||||
logger.error "[ZipDown#assort] ===> #{obj.class.to_s.to_sym} unKown !!"
|
logger.error "[ZipDown#assort] ===> #{obj.class.to_s.to_sym} unKown !!"
|
||||||
end
|
end
|
||||||
|
send_file zipfile, :filename => obj.name, :type => detect_content_type(zipfile) if zipfile
|
||||||
|
|
||||||
rescue NameError, ActiveRecord::RecordNotFound => e
|
#rescue NameError, ActiveRecord::RecordNotFound => e
|
||||||
logger.error "[ZipDown] ===> #{e}"
|
#logger.error "[ZipDown] ===> #{e}"
|
||||||
@error = e
|
#@error = e
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def zip bid
|
def zip_bid(bid)
|
||||||
# Todo: User Access Controll
|
# Todo: User Access Controll
|
||||||
homeworks_attach_path = []
|
|
||||||
bid.homeworks.each do |homeattach|
|
homeattaches = bid.homeworks
|
||||||
homeattach.attachments.each do |attach|
|
# 得到每一个人所有文件打包的zip文件
|
||||||
length = attach.storage_path.length
|
# 并将每一个人的zip打包为一个并返回路径
|
||||||
homeworks_attach_path << attach.diskfile.to_s.slice((length+1)..-1)
|
user_zip_paths = homeattaches.map do |homeattach|
|
||||||
|
zip_homework_by_user homeattach
|
||||||
end
|
end
|
||||||
end
|
zipping "#{Time.now.to_i}_#{bid.name}.zip", user_zip_paths, OUTPUT_FOLDER
|
||||||
@paths = homeworks_attach_path
|
|
||||||
zipfile = ziping homeworks_attach_path
|
#@paths = homeworks_attach_path
|
||||||
send_file zipfile, :filename => bid.name,
|
#zipfile = ziping homeworks_attach_path
|
||||||
:type => detect_content_type(zipfile)
|
#send_file zipfile, :filename => bid.name,
|
||||||
rescue Errno::ENOENT => e
|
# :type => detect_content_type(zipfile)
|
||||||
logger.error "[Errno::ENOENT] ===> #{e}"
|
#rescue Errno::ENOENT => e
|
||||||
@error = e
|
# logger.error "[Errno::ENOENT] ===> #{e}"
|
||||||
|
# @error = e
|
||||||
end
|
end
|
||||||
|
|
||||||
def ziping files_path
|
def zip_homework_by_user(homeattach)
|
||||||
|
homeworks_attach_path = []
|
||||||
|
# 需要将所有homework.attachments遍历加入zip
|
||||||
|
# 并且返回zip路径
|
||||||
|
user_attaches_paths = homeattach.attachments.each do |attach|
|
||||||
|
#length = attach.storage_path.length
|
||||||
|
homeworks_attach_path << attach.diskfile#.to_s.slice((length+1)..-1)
|
||||||
|
end
|
||||||
|
zipping "#{Time.now.to_i}_#{homeattach.user.name.to_s}.zip", homeworks_attach_path, OUTPUT_FOLDER, true
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def zipping(zip_name_refer, files_paths, output_path, is_attachment=false)
|
||||||
|
# 输入待打包的文件列表,已经打包文件定位到ouput_path
|
||||||
ic = Iconv.new('GBK//IGNORE', 'UTF-8//IGNORE')
|
ic = Iconv.new('GBK//IGNORE', 'UTF-8//IGNORE')
|
||||||
folder = "#{Rails.root}/files"
|
input_filename = files_paths
|
||||||
input_filename = files_path
|
|
||||||
zipfile_name = "#{Rails.root}/tmp/archiveZip/archive_#{Time.now.to_i}.zip"
|
rename_zipfile = zip_name_refer ||= "archive_#{Time.now.to_i}.zip"
|
||||||
|
zipfile_name = "#{output_path}/#{rename_zipfile}"
|
||||||
|
|
||||||
Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name))
|
Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name))
|
||||||
|
|
||||||
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
||||||
input_filename.each do |filename|
|
input_filename.each do |filename|
|
||||||
zipfile.add(ic.iconv(filename_to_real(File.basename(filename))), folder + '/' + filename)
|
rename_file = Time.now.to_i.to_s+ ic.iconv( (File.basename(filename)) ).to_s
|
||||||
|
rename_file = ic.iconv( filename_to_real( File.basename(filename))).to_s if is_attachment
|
||||||
|
|
||||||
|
zipfile.add(rename_file, filename)
|
||||||
|
end
|
||||||
|
zipfile.get_output_stream('ReadMe') do |os|
|
||||||
|
os.write 'Homeworks'
|
||||||
end
|
end
|
||||||
zipfile.get_output_stream("ReadMe"){ |os|
|
|
||||||
os.write "Homeworks"
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
zipfile_name
|
zipfile_name
|
||||||
rescue Errno=> e
|
rescue Errno => e
|
||||||
logger.error "[zipdown#zipping] ===> #{e}"
|
logger.error "[zipdown#zipping] ===> #{e}"
|
||||||
@error = e
|
@error = e
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#def ziping files_path
|
||||||
|
# ic = Iconv.new('GBK//IGNORE', 'UTF-8//IGNORE')
|
||||||
|
# folder = SaveFolder
|
||||||
|
# input_filename = files_path
|
||||||
|
# zipfile_name = "#{OutputFolder}/archive_#{Time.now.to_i}.zip"
|
||||||
|
#
|
||||||
|
# Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name))
|
||||||
|
# Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
||||||
|
# input_filename.each do |filename|
|
||||||
|
# zipfile.add(ic.iconv(filename_to_real(File.basename(filename))), folder + '/' + filename)
|
||||||
|
# end
|
||||||
|
# zipfile.get_output_stream("ReadMe") { |os|
|
||||||
|
# os.write "Homeworks"
|
||||||
|
# }
|
||||||
|
# end
|
||||||
|
# zipfile_name
|
||||||
|
#rescue Errno => e
|
||||||
|
# logger.error "[zipdown#zipping] ===> #{e}"
|
||||||
|
# @error = e
|
||||||
|
#end
|
||||||
|
|
||||||
def detect_content_type(name)
|
def detect_content_type(name)
|
||||||
content_type = Redmine::MimeType.of(name)
|
content_type = Redmine::MimeType.of(name)
|
||||||
content_type.to_s
|
content_type.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
def filename_to_real name
|
def filename_to_real(name)
|
||||||
attach = Attachment.find_by_disk_filename(name)
|
attach = Attachment.find_by_disk_filename(name)
|
||||||
attach.filename
|
attach.filename
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
<div class="homeworks">
|
<div class="homeworks">
|
||||||
<%= link_to homework.name, respond_path(homework) %>(<%=homework.homeworks.count %>)<%#Bid%>
|
<%= link_to homework.name, respond_path(homework) %>(<%=homework.homeworks.count %>)<%#Bid%>
|
||||||
<div class="attach_item">
|
<div class="attach_item">
|
||||||
<%= link_to "package", test_zip_path(:homework_id => homework.id)%><br/>
|
<%= link_to "package", zipdown_assort_path(obj_class: homework.class, obj_id: homework.id) %><br/>
|
||||||
<% homework.homeworks.each do |homeattach|%><%#homework.class == Bid %>
|
<% homework.homeworks.each do |homeattach|%><%#homework.class == Bid %>
|
||||||
<% homeattach.attachments.each do |attach|%>
|
<% homeattach.attachments.each do |attach|%>
|
||||||
<%= link_to_attachment attach, author: true, :download => true %> (<%=attach.author%>)
|
<%= link_to_attachment attach, author: true, :download => true %> (<%=attach.author%>)
|
||||||
|
|
Loading…
Reference in New Issue