2013-08-01 10:33:49 +08:00
|
|
|
class AvatarController < ApplicationController
|
|
|
|
|
|
|
|
|
|
|
|
#before_filter :set_cache_buster
|
|
|
|
include AvatarHelper
|
|
|
|
|
|
|
|
def upload
|
|
|
|
# Make sure that API users get used to set this content type
|
|
|
|
# as it won't trigger Rails' automatic parsing of the request body for parameters
|
|
|
|
unless request.content_type == 'application/octet-stream'
|
|
|
|
render :nothing => true, :status => 406
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
unless request.raw_post.nil?
|
|
|
|
@source_type = params[:source_type]
|
|
|
|
@source_id = params[:source_id]
|
|
|
|
@temp_file = request.raw_post
|
|
|
|
if @temp_file.size > 0
|
|
|
|
if @temp_file.respond_to?(:original_filename)
|
|
|
|
@image_file = @temp_file.original_filename
|
|
|
|
#image_file.force_encoding("UTF-8") if filename.respond_to?(:force_encoding)
|
|
|
|
else
|
|
|
|
@image_file=params[:filename]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if @temp_file && (@temp_file.size > 0)
|
|
|
|
diskfile=disk_filename(@source_type,@source_id)
|
|
|
|
@urlfile='/' << File.join("images","avatars",avatar_directory(@source_type),avatar_filename(@source_id,@image_file))
|
|
|
|
logger.info("Saving avatar '#{diskfile}' (#{@temp_file.size} bytes)")
|
|
|
|
path = File.dirname(diskfile)
|
|
|
|
unless File.directory?(path)
|
|
|
|
FileUtils.mkdir_p(path)
|
|
|
|
end
|
|
|
|
md5 = Digest::MD5.new
|
|
|
|
File.open(diskfile, "wb") do |f|
|
|
|
|
if @temp_file.respond_to?(:read)
|
|
|
|
buffer = ""
|
|
|
|
while (buffer = @temp_file.read(8192))
|
|
|
|
f.write(buffer)
|
|
|
|
md5.update(buffer)
|
|
|
|
end
|
|
|
|
else
|
|
|
|
f.write(@temp_file)
|
|
|
|
md5.update(@temp_file)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
# self.digest = md5.hexdigest
|
|
|
|
end
|
|
|
|
@temp_file = nil
|
2014-01-20 08:18:57 +08:00
|
|
|
# @avatar = Avatar.new(:receive_file => request.raw_post)
|
|
|
|
# @avatar.source_id = User.current.id
|
|
|
|
# @avatar.image_file = params[:filename].presence || Redmine::Utils.random_hex(16)
|
|
|
|
# saved = @avatar.save
|
|
|
|
begin
|
|
|
|
f = Magick::ImageList.new(diskfile)
|
|
|
|
width = 300.0;
|
|
|
|
proportion = (width/f[0].columns)
|
|
|
|
height = (f[0].rows*proportion)
|
|
|
|
f.resize_to_fill!(width,height)
|
|
|
|
# f.scale!(width,height)
|
|
|
|
f.write(diskfile)
|
|
|
|
rescue Exception => e
|
|
|
|
logger.error "[Error] avatar : avatar_controller#upload ===> #{e}"
|
|
|
|
end
|
2013-08-12 22:46:00 +08:00
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.js
|
|
|
|
format.api {
|
|
|
|
if saved
|
|
|
|
render :action => 'upload', :status => :created
|
|
|
|
else
|
|
|
|
render_validation_errors(@avatar)
|
|
|
|
end
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def set_cache_buster
|
|
|
|
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
|
|
|
|
response.headers["Pragma"] = "no-cache"
|
|
|
|
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
end
|