=begin tldr: $ gem install bkblz $ bkblz help More... This is the bkblz Ruby gem, a library for the Backblaze B2 cloud storage API: https://www.backblaze.com/b2/docs/ Currently the gem supports the following V1 API calls: * b2_authorize_account * b2_create_bucket * b2_delete_bucket * b2_delete_file_version * b2_get_file_info * b2_get_upload_part_url * b2_finish_large_file * b2_list_buckets * b2_list_file_names * b2_list_file_versions * b2_start_large_file * b2_upload_file * b2_upload_part * b2_download_file_by_id * b2_download_file_by_name Run `ruby README.rb` for a working demo, but first add your application key and account id in the slots below. Or `gem install bkblz` to begin. After install try `bkblz -h` to use the CLI =end $: << 'lib' require 'bkblz' Bkblz.configure do |config_map| config_map.merge!( :application_key => "!!! API KEY !!!", :account_id => "!!! ACCOUNT ID !!!", :debug_http => false, :log_level => :info # change this to :debug for more info ) end Bkblz.log.info do <<-EOS # The block above configures some defaults (including the # logger, which is why this is after the configure block), see # Bkblz::Config for details. This is where to set the account_id # and application_key. EOS end if Bkblz.config.account_id.match /!!!/ Bkblz.log.error "you didn't fill in your credentials, read the comments" exit 1 end def run_readme Bkblz.log.info do <<-EOS # Using the config above, create an authorized session. All # requests will run in the context of this session. See # +Bkblz::V1::Session#authorize+. EOS end Bkblz::V1::Session.authorize Bkblz.config do |session| Bkblz.log.info "API session => #{session}" Bkblz.log.info do <<-EOS # First try to find an existing bucket named my-test-bucket, # we'll use that if it exists. All requests in a session are sent # through the session so that the request object gets access to the # auth credentials. EOS end buckets = session.send(Bkblz::V1::ListBucketsRequest.new).buckets Bkblz.log.info "bucket list => #{buckets}" new_bucket_name = "bkblz-readme-bucket" bucket = buckets.find { |b| b.bucket_name == new_bucket_name } Bkblz.log.info do <<-EOS # Otherwise create a new my-test-bucket EOS end begin unless bucket bucket = Bkblz::V1::Model::Bucket.new \ :bucket_name => new_bucket_name, :bucket_type => "allPrivate", :account_id => session.account_id Bkblz.log.info do <<-EOS # Pass a model to the CreateBucketRequest, # models are just named wrappers with dynamic methods # around the JSON responses provided back from the Bkblz # API. See lib/bkblz/v1/models.rb for a list of defined API # objects. See Bkblz::V1::Model::Base for how it work. EOS end request = Bkblz::V1::CreateBucketRequest.new bucket Bkblz.log.info "bucket model => #{bucket}" # Bkblz::V1::Response objects are returned from +send+. Some # provide a to_model method if they declare the +response_model+ # in the class definition. bucket = session.send(request).to_model Bkblz.log.info "created bucket => #{bucket}" end Bkblz.log.info do <<-EOS # Uploading a file begins with getting a dynamic URL from the API. EOS end upload_auth = session.send( Bkblz::V1::GetUploadUrlRequest.new bucket.bucket_id).to_model Bkblz.log.info "upload file URL => #{upload_auth.upload_url}" Bkblz.log.info do <<-EOS # Use the upload_auth model (a # Bkblz::V1::Model::UploadAuth) to upload some files. EOS end 5.times do |i| body = "some text #{i}" file_name = "some_text_#{i}.txt" content_type = nil upload_file_info = session.send( Bkblz::V1::UploadFileRequest.new upload_auth, body, file_name, content_type, Time.now.to_i * 1000).to_model Bkblz.log.info "uploaded file => #{upload_file_info.file_name}" end Bkblz.log.info do <<-EOS # We uploaded 5 files above, here we'll read back out # metadata from the first 2 files in the bucket. EOS end list_files_response = session.send( Bkblz::V1::ListFileVersionsRequest.new bucket, 2) bucket_files_info = list_files_response.files Bkblz.log.info "first 2 files => #{bucket_files_info.map(&:file_name).join "\n"}" Bkblz.log.info do <<-EOS # The response object returned object is a # Bkblz::Api::PaginatedResponse. Use its +has_more?+ and # +next_request+ methods to page through more results. EOS end while list_files_response.has_more? list_files_response = session.send list_files_response.next_request 100 bucket_files_info.concat list_files_response.files Bkblz.log.info "next N files => #{list_files_response.files.map(&:file_name).join "\n"}" end Bkblz.log.info do <<-EOS # Files can also be listed by name. EOS end list_files_response = session.send( Bkblz::V1::ListFileNamesRequest.new bucket, 10) bucket_files_info = list_files_response.files Bkblz.log.info "files by name => #{bucket_files_info.map(&:file_name).join "\n"}" Bkblz.log.info do <<-EOS # Files can be downloaded by file name EOS end file_name = bucket_files_info.first.file_name file_name_download = session.send( Bkblz::V1::DownloadFileByNameRequest.new bucket, file_name).to_model Bkblz.log.info file_name_download Bkblz.log.info "file body: #{file_name_download.body}" Bkblz.log.info do <<-EOS # Files can also be downloaded by file id EOS end file_info = bucket_files_info[1] file_id_download = session.send( Bkblz::V1::DownloadFileByIdRequest.new file_info).to_model Bkblz.log.info file_id_download Bkblz.log.info "file body: #{file_id_download.body}" Bkblz.log.info do <<-EOS # File byte ranges can also be downloaded EOS end bytes = (2..8) byte_range_download = session.send( Bkblz::V1::DownloadFileByNameRequest.new bucket, file_name, bytes).to_model Bkblz.log.info "file bytes: #{byte_range_download.body}" # TODO: add examples for uploading large files by parts... see lib/bkblz/task/upload_file rescue => e Bkblz.log.error "there was an error: #{e}" Bkblz.log.error e.backtrace.join "\n" Bkblz.log.warn "cleaning up the bucket" ensure clear_the_bucket session, bucket end end end def clear_the_bucket(session, bucket) list_files_response = session.send( Bkblz::V1::ListFileVersionsRequest.new bucket) bucket_files_info = list_files_response.files Bkblz.log.info do <<-EOS # Delete all the files in the bucket that we added. This is # a service requirement to deleting a bucket. EOS end bucket_files_info.each do |file_info| request = Bkblz::V1::DeleteFileVersionRequest.new file_info delete_file_version_response = session.send request Bkblz.log.info "deleted file => #{delete_file_version_response.to_model.file_name}" end Bkblz.log.info do <<-EOS # Finally, delete the bucket. EOS end request = Bkblz::V1::DeleteBucketRequest.new bucket delete_bucket_response = session.send request Bkblz.log.info "deleted bucket => #{bucket.bucket_name}/#{bucket.bucket_id}" end run_readme
Project
bkblz
Bkblz GEM for the Backblaze B2 API. https://www.backblaze.com/b2/docs/
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
Pull Requests
Development
Project Readme