

π§ Concept
Base64 encoding can be used to convert binary files like PDFs, Pictures, etc into a form of non-binary data that is text-based. Base64 is basically groups of 4 text characters that typically ends with an =
or ==
character.
Once decoded, the original file can be used as normal.
Below is the base64 encoded version of a Picture, Copy & Paste it in your browser Address bar.
data:image/png;base64,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
β Features
- Upload files to Google Drive without using storage space
- Download any stored files to your computer
π§ Logic
- Google Docs take up 0 Bytes of quota in your Google Drive
- Split up binary files into Google Docs, with base64 encoded text
- The size of the encoded file is always larger than the original. Base64 encodes binary data to a ratio of about 4:3.
- A single google doc can store about a million characters. This is around 710KB of base64 encoded data.
- Some experiments with multi-threading the uploads, but there was no significant performance increase.
π Requirements
π§° Setup & Authentication
git clone https://github.com/stewartmcgown/uds.git
cd uds
pip3 install -r requirements.txt
pip3 install --upgrade google-api-python-client
pip3 install tqdm
pip3 install oauth2client
- Head to Googleβs API page and enable the Drive API
- Download the configuration file as
client_secret.json
to the UDS directory
- Run
python3 uds.py
or ./uds.py
for initial set up
UDS Core
Upload
> ./uds.py --push Ubuntu.Desktop.16.04.iso
Ubuntu.Desktop.16.04.iso will required 543 Docs to store.
Created parent folder with ID 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8
Successfully Uploaded Ubuntu.Desktop.16.04.iso: [ββββββββββββββββββββββββββββββ] 100%
[Layout]
./uds.py --push argument
argument: Path_to_file+file_name
List
> ./uds.py --list
Name Size Encoded ID
------------------------ ----- --------- ---------------------------------
Ubuntu.Desktop.16.04.iso 810 MB 1.1 GB 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8
Ubuntu.Desktop.18.10.iso 1.1 GB 1.3 GB 1RzzVfN9goHMTkM1Hf1FUWUVS_2R3GK7D
Also supports searching with a query!
> ./uds.py --list "18"
Name Size Encoded ID
------------------------ ----- --------- ---------------------------------
Ubuntu.Desktop.18.10.iso 1.1 GB 1.3 GB 1RzzVfN9goHMTkM1Hf1FUWUVS_2R3GK7D
[Layout]
./uds.py --list
arguments: query
Download
> ./uds.py --pull 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8
Downloaded Ubuntu.Desktop.16.04.iso: [ββββββββββββββββββββββββββββββ] 100%
[Layout]
./uds.py --pull argument
argument: id_of_file
Delete
> ./uds.py --delete 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8
Deleted 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8
[Layout]
./uds.py --delete argument
argument: id_of_file
Alpha Extensions
Grab
> ./uds.py --grab test.7z
Update Successful!
Downloaded test.7z: [ββββββββββββββββββββββββββββββ] 100%
[Layout]
./uds.py --grab argument
argument: name_of_file
Erase
>./uds.py --erase test2.7z
Update Successful!
Deleted test2.7z
[Layout]
./uds.py --erase argument
argument: name_of_file
Update
> ./uds.py --update
Name Encoded Size
--------- -------- -----
file_name 1.1 GB 810 MB
"User.txt"
Name Encoded Size
--------- -------- -----
file_name 1.1 GB 810 MB
"data.txt"
{
"file0": "1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8"
"file2": "1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms9"
}
[Layout]
./uds.py --update
arguments: None
Bulk Extensions
Bunch
> ./uds.py --bunch test
test.7z.1 will require 1337 Docs to store.
Created parent folder with ID 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAm12
Successfully Uploaded test.7z.1: [ββββββββββββββββββββββββββββββ] 100%
test.7z.2 will require 1337 Docs to store.
Created parent folder with ID 1fc6JGpX6vUWiwflL1jBxM1YpuQQFAm12
Successfully Uploaded test.7z.2: [ββββββββββββββββββββββββββββββ] 100%
test.7z.3 will require 600 Docs to store.
Created parent folder with ID 1fc6JGpX6vTOiwflL1jBxM1YpuQQFAm12
Successfully Uploaded test.7z.3: [ββββββββββββββββββββββββββββββ] 100%
[Layout]
./uds.py --bunch argument[1] argument[2]
argument[1]: name_in_files, or wildcard "?" without quotes
argument[2]: directory, default is current directory of UDS
Batch
> ./uds.py --batch file_name
Update Successful!
Downloaded file_name.7z.1: [ββββββββββββββββββββββββββββββ] 100%
Downloaded file_name.7z.2: [ββββββββββββββββββββββββββββββ] 100%
Downloaded file_name.7z.3: [ββββββββββββββββββββββββββββββ] 100%
[Layout]
./uds.py --batch argument
arguments: name_in_files, or wildcard "?" without quotes
Wipe
> ./uds.py --wipe file
Update Successful!
Deleted file.7z.1
Deleted file.7z.2
Deleted file.7z.3
[Layout]
./uds.py --wipe argument
arguments: name_in_files, or wildcard "?" without quotes
This content has been shared for Educational And Non-Profit Purpose ONLY