cartodb/app/controllers/api/json/uploads_controller.rb
2020-06-15 10:58:47 +08:00

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