Commit 419360c6 by tady

S3 uploader, slide cover

parent c964c9cc
......@@ -140,3 +140,5 @@ gem 'annotate', ">=2.6.0"
gem 'kaminari', github: 'amatsuda/kaminari'
gem 'jwt', '0.1.11'
gem 'rmagick', :require => 'RMagick'
......@@ -291,6 +291,7 @@ GEM
rest-client (1.7.2)
mime-types (>= 1.16, < 3.0)
netrc (~> 0.7)
rmagick (2.13.2)
rspec (3.0.0)
rspec-core (~> 3.0.0)
rspec-expectations (~> 3.0.0)
......@@ -440,6 +441,7 @@ DEPENDENCIES
pry-rails
rack-mini-profiler
rails (~> 4.1)
rmagick
rspec-rails
rubocop
sass-rails
......
......@@ -11,12 +11,15 @@ $.extend
$.each data.result.files, (index, file) ->
# TODO: カーソル位置に挿入
console.log file
if file.type is 'image'
# image ![file-name](file-url)
settings.$textarea.val(settings.$textarea.val() + "\n![" + file.name + "](" + file.url + ")\n")
settings.$textarea.val(settings.$textarea.val() + "\n![" + file.name + "](" + file.image + ")\n")
else if file.type is 'slide'
# slide !slide!(file-url)
settings.$textarea.val(settings.$textarea.val() + "\n!slide!(" + file.url + ")\n")
# [![alt text](image link)](web link)
settings.$textarea.val(settings.$textarea.val() + "\n[![" + file.name + "](" + file.image + ")](" + file.url + ")\n")
settings.$textarea.trigger("change")
# $('<p/>').text(file.name).appendTo('#files') # TODO
......
......@@ -11,32 +11,36 @@ class ApisController < ApplicationController
end
# Receive file and upload to S3
# @response [JSON]
# { "status": "OK",
# "files": [
# { "name": <file name>, "url": <link url>, "image": <image url>, "type": <file type>}, ...
# ]
# }
def file_receiver
s3 = AWS::S3.new
bucket_name = "#{Settings.s3.bucket_name}/1/#{current_user.id}"
# bucket_name = "1/#{current_user.id}"
bucket = s3.buckets[bucket_name]
s3_uploader = S3Uploader.new(bucket: "#{Settings.s3.bucket_name}/1/#{current_user.id}")
s3_files = []
params[:files].each do |file|
basename = File.basename(file.path)
# Skip uploading if file ext is not listed.
next unless file.original_filename =~ /\.(jpe?g|png|gif|pdf)\Z/
object_file_name = "#{Digest::MD5.file(file.path).to_s}#{File.extname(file.original_filename)}"
obj = bucket.objects[object_file_name]
res = obj.write(file: file.path, acl: :public_read)
res = s3_uploader.upload!(file: file.path, name: object_file_name)
file_type = case file.original_filename
case file.original_filename
when /\.(jpe?g|png|gif)\Z/
:image
s3_files << { type: 'image', name: file.original_filename, image: res.public_url.to_s }
when /\.pdf\Z/
:slide
end
cover_image_name = "#{Digest::MD5.file(file.path).to_s}-cover.png"
pdf = Magick::ImageList.new(file.path)
cover_tmp = Rails.root.join('tmp', cover_image_name)
pdf[0].write(cover_tmp)
cover_res = s3_uploader.upload!(file: cover_tmp, name: cover_image_name)
s3_files << { name: file.original_filename, url: res.public_url.to_s, type: file_type }
s3_files << { type: 'slide', name: cover_image_name, url: res.public_url.to_s, image: cover_res.public_url.to_s }
end
end
render json: { status: 'OK', files: s3_files }
......
class S3Uploader
# Preparing S3 object and bucket.
# @param [String] access_key_id.
# @param [String] secret_access_key.
# @param [String] region: uploading S3 bucket region.
# @param [String] bucket: uploading backet name.
def initialize(access_key_id: Settings.s3.access_key_id,
secret_access_key: Settings.s3.secret_access_key,
region: "ap-northeast-1",
bucket:)
@s3 = AWS::S3.new(access_key_id: access_key_id,
secret_access_key: secret_access_key,
region: region)
@bucket = @s3.buckets[bucket]
end
# Upload file to S3
# @param [String] file: uploading file path.
# @param [String] name: uploading file name.
def upload!(file:, name:)
obj = @bucket.objects[name]
obj.write(file: file, acl: :public_read)
end
end
AWS.config(
access_key_id: Settings.s3.access_key_id,
secret_access_key: Settings.s3.secret_access_key,
s3_endpoint: "s3-ap-northeast-1.amazonaws.com"
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment