docbrown/app/controllers/image_uploads_controller.rb
Bolarinwa Balogun 41aff162cc Allow upload of multiple images at a time (#3599)
* Allow upload of multiple images at a time

* Update schema.rb
2019-08-18 15:03:14 -04:00

53 lines
1.6 KiB
Ruby

class ImageUploadsController < ApplicationController
before_action :authenticate_user!
after_action :verify_authorized
def create
authorize :image_upload
begin
raise RateLimitChecker::UploadRateLimitReached if RateLimitChecker.new(current_user).limit_by_situation("image_upload")
raise CarrierWave::IntegrityError if params[:image].blank?
uploaders = image_upload(params[:image])
rescue RateLimitChecker::UploadRateLimitReached
respond_to do |format|
format.json { render json: { error: "Upload limit reached!" } }
end
return
rescue CarrierWave::IntegrityError => e # client error
respond_to do |format|
format.json { render json: { error: e.message }, status: :unprocessable_entity }
end
return
rescue CarrierWave::ProcessingError # server error
respond_to do |format|
format.json { render json: { error: "A server error has occurred!" }, status: :server_error }
end
return
end
cloudinary_link(uploaders)
end
def cloudinary_link(uploaders)
links = if params[:wrap_cloudinary]
[ApplicationController.helpers.cloud_cover_url(uploaders[0].url)]
else
uploaders.map(&:url)
end
respond_to do |format|
format.json { render json: { links: links }, status: :ok }
end
end
private
def image_upload(images)
images.map do |image|
uploader = ArticleImageUploader.new
uploader.store!(image)
RateLimitChecker.new(current_user).track_image_uploads
uploader
end
end
end