From e2a305e7750a26a3d0aecedd3b339781c0c5d2e8 Mon Sep 17 00:00:00 2001 From: Rick Hewes Date: Tue, 8 Mar 2022 11:40:39 +0000 Subject: [PATCH 1/3] Add configurable metadata Add the ability to add optional metadata. --- lib/tus/client.rb | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/tus/client.rb b/lib/tus/client.rb index bb16fb8..fde0c79 100644 --- a/lib/tus/client.rb +++ b/lib/tus/client.rb @@ -21,20 +21,20 @@ def initialize(server_url) @capabilities = capabilities end - def upload(file_path) + def upload(file_path, metadata = nil) raise 'No such file!' unless File.file?(file_path) file_name = File.basename(file_path) file_size = File.size(file_path) io = File.open(file_path, 'rb') - upload_by_io(file_name: file_name, file_size: file_size, io: io) + upload_by_io(file_name: file_name, file_size: file_size, io: io, , metadata: metadata) end - def upload_by_io(file_name:, file_size:, io:) + def upload_by_io(file_name:, file_size:, io:, metadata:) raise 'Cannot upload a stream of unknown size!' unless file_size - uri = create_remote(file_name, file_size) + uri = create_remote(file_name, file_size, metadata) # we use only parameters that are known to the server offset, length = upload_parameters(uri) @@ -71,16 +71,27 @@ def capabilities response['Tus-Extension']&.split(',') end - def create_remote(file_name, file_size) + def create_remote(file_name, file_size, metadata) unless @capabilities.include?('creation') raise 'New file uploading is not supported!' end + + if metadata.nil? then + metadata = {} + end + + metadata[:filename] = file_name + + pairs = [] + metadata.each do |key, value| + pairs << "#{key} #{Base64.strict_encode64(value)}" + end request = Net::HTTP::Post.new(@server_uri.request_uri) request['Content-Length'] = 0 request['Upload-Length'] = file_size request['Tus-Resumable'] = TUS_VERSION - request['Upload-Metadata'] = "filename: #{Base64.strict_encode64(file_name)},is_confidential" + request['Upload-Metadata'] = pairs.join(',') response = nil From 5561c0b68387f0486bb7bd5e8f039866a5f90b78 Mon Sep 17 00:00:00 2001 From: Rick Hewes Date: Tue, 8 Mar 2022 11:42:08 +0000 Subject: [PATCH 2/3] Fix Typo --- lib/tus/client.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tus/client.rb b/lib/tus/client.rb index fde0c79..c7e9c07 100644 --- a/lib/tus/client.rb +++ b/lib/tus/client.rb @@ -28,7 +28,7 @@ def upload(file_path, metadata = nil) file_size = File.size(file_path) io = File.open(file_path, 'rb') - upload_by_io(file_name: file_name, file_size: file_size, io: io, , metadata: metadata) + upload_by_io(file_name: file_name, file_size: file_size, io: io, metadata: metadata) end def upload_by_io(file_name:, file_size:, io:, metadata:) From a26375575697e78768c15fce517ec13c92a5c836 Mon Sep 17 00:00:00 2001 From: Rick Hewes Date: Thu, 10 Mar 2022 14:43:10 +0000 Subject: [PATCH 3/3] Update for code review --- lib/tus/client.rb | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/lib/tus/client.rb b/lib/tus/client.rb index c7e9c07..2fa40f1 100644 --- a/lib/tus/client.rb +++ b/lib/tus/client.rb @@ -75,23 +75,16 @@ def create_remote(file_name, file_size, metadata) unless @capabilities.include?('creation') raise 'New file uploading is not supported!' end - - if metadata.nil? then - metadata = {} - end + metadata ||= {} metadata[:filename] = file_name - - pairs = [] - metadata.each do |key, value| - pairs << "#{key} #{Base64.strict_encode64(value)}" - end + metadata_pairs = metadata.map { |key, value| "#{key} #{Base64.strict_encode64(value)}" } request = Net::HTTP::Post.new(@server_uri.request_uri) request['Content-Length'] = 0 request['Upload-Length'] = file_size request['Tus-Resumable'] = TUS_VERSION - request['Upload-Metadata'] = pairs.join(',') + request['Upload-Metadata'] = metadata_pairs.join(',') response = nil