51 lines
1.5 KiB
Ruby
51 lines
1.5 KiB
Ruby
class Api::Json::UploadsController < Api::ApplicationController
|
|
|
|
ssl_required :create
|
|
|
|
skip_before_filter :verify_authenticity_token
|
|
before_filter :api_or_user_authorization_required
|
|
|
|
def create
|
|
@stats_aggregator.timing('uploads.create') do
|
|
|
|
begin
|
|
temp_file = filename = filedata = nil
|
|
|
|
case
|
|
when params[:filename].present? && request.body.present?
|
|
filename = params[:filename]
|
|
filedata = request.body.read.force_encoding('utf-8')
|
|
when params[:file].present?
|
|
filename = params[:file].original_filename
|
|
filedata = params[:file].read.force_encoding('utf-8')
|
|
end
|
|
|
|
random_token = Digest::SHA2.hexdigest("#{Time.now.utc}--#{filename.object_id.to_s}").first(20)
|
|
|
|
file_upload_helper = CartoDB::FileUpload.new(Cartodb.config[:importer].fetch("uploads_path", nil))
|
|
file_upload_helper.get_uploads_path
|
|
|
|
@stats_aggregator.timing('save') do
|
|
FileUtils.mkdir_p(file_upload_helper.get_uploads_path.join(random_token))
|
|
file = File.new(file_upload_helper.get_uploads_path.join(random_token).join(File.basename(filename)), 'w')
|
|
file.write filedata
|
|
file.close
|
|
end
|
|
|
|
render :json => {:file_uri => file.path[/(\/uploads\/.*)/, 1], :success => true}
|
|
rescue => e
|
|
logger.error e
|
|
logger.error e.backtrace
|
|
head(400)
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
def api_or_user_authorization_required
|
|
api_authorization_required || login_required
|
|
end
|
|
private :api_or_user_authorization_required
|
|
|
|
end
|