Sha256: 8231a79a85da8f91961fec632eded6743ef271c7147b1abf5b86bea6ea278c01
Contents?: true
Size: 1.25 KB
Versions: 13
Compression:
Stored size: 1.25 KB
Contents
module Tessa class RackUploadProxy def call(env) request = Rack::Request.new(env) ::ActiveStorage::Current.host ||= request.base_url # Call in to ActiveStorage to create a DirectUpload blob params = env['rack.request.form_hash'] blob = ::ActiveStorage::Blob.create_before_direct_upload!({ filename: params["name"], byte_size: params["size"], content_type: params["mime_type"], checksum: params["checksum"] }) env['rack.session'][:tessa_upload_asset_ids] ||= [] env['rack.session'][:tessa_upload_asset_ids] << blob.signed_id response = { asset_id: blob.signed_id, upload_url: blob.service_url_for_direct_upload, upload_method: 'PUT', # ActiveStorage is always PUT upload_headers: blob.service_headers_for_direct_upload } [200, {"Content-Type" => "application/json"}, [response.to_json]] rescue Tessa::RequestFailed [500, {"Content-Type" => "application/json"}, [{ "error" => "Failed to retreive upload URL" }.to_json]] rescue ActiveRecord::NotNullViolation => e [400, {"Content-Type" => "application/json"}, [{ "error" => e.message }.to_json]] end def self.call(*args) new.call(*args) end end end
Version data entries
13 entries across 13 versions & 1 rubygems