2013-02-05 14:16:51 -05:00
require 'digest/sha1'
2013-06-05 00:34:53 +02:00
require 'image_sizer'
require 'imgur'
require 's3'
require 'local_store'
2013-02-05 14:16:51 -05:00
class Upload < ActiveRecord :: Base
belongs_to :user
belongs_to :topic
validates_presence_of :filesize
validates_presence_of :original_filename
2013-04-07 17:52:46 +02:00
def self . create_for ( user_id , file , topic_id )
2013-06-05 00:34:53 +02:00
# retrieve image info
image_info = FastImage . new ( file . tempfile , raise_on_failure : true )
# compute image aspect ratio
width , height = ImageSizer . resize ( * image_info . size )
2013-04-07 17:52:46 +02:00
upload = Upload . create! ( {
user_id : user_id ,
topic_id : topic_id ,
2013-06-05 00:34:53 +02:00
original_filename : file . original_filename ,
2013-04-07 17:52:46 +02:00
filesize : File . size ( file . tempfile ) ,
2013-06-05 00:34:53 +02:00
width : width ,
height : height ,
url : " "
2013-04-07 17:52:46 +02:00
} )
2013-06-05 00:34:53 +02:00
# make sure we're at the beginning of the file (FastImage is moving the pointer)
file . rewind
2013-05-31 03:13:37 +02:00
2013-06-05 00:34:53 +02:00
# store the file and update its url
upload . url = Upload . store_file ( file , image_info , upload . id )
2013-04-07 17:52:46 +02:00
upload . save
upload
end
2013-06-05 00:34:53 +02:00
def self . store_file ( file , image_info , upload_id )
return Imgur . store_file ( file , image_info , upload_id ) if SiteSetting . enable_imgur?
return S3 . store_file ( file , image_info , upload_id ) if SiteSetting . enable_s3_uploads?
return LocalStore . store_file ( file , image_info , upload_id )
end
2013-02-05 14:16:51 -05:00
end
2013-05-24 12:48:32 +10:00
# == Schema Information
#
# Table name: uploads
#
# id :integer not null, primary key
# user_id :integer not null
# topic_id :integer not null
# original_filename :string(255) not null
# filesize :integer not null
# width :integer
# height :integer
# url :string(255) not null
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_uploads_on_forum_thread_id (topic_id)
# index_uploads_on_user_id (user_id)
#