Send to Any Cloud - Without Ever Replacing a File

6 min read Sending Multi-Cloud

FileFortress already finds your files across every cloud and pulls them down when you need them. The missing direction was the other one: you have a folder of photos on your laptop or an external drive, and you want it safely in the cloud - without wondering what you just overwrote.

The new files upload command (Send to remote in the desktop app) does exactly that. It sends a file or a whole folder from your computer to Amazon S3, Backblaze B2, OneDrive, Google Drive, or a folder on another local remote such as an external drive. And it's built around one promise: a send never deletes or replaces a file that was already there.

The Short Version

Preview what will be sent, confirm, and FileFortress sends only the files that are missing at the destination. Files already there are left exactly as they are. Every file it sends is checked afterwards against what the provider stored, and each one gets a plain label telling you what happened. Your files go straight from your computer to your cloud - never through FileFortress servers. There is nothing else to install.

One Command, Five Destinations

Name the local remote the files are on, the file or folder, where to send it with --to, and the bucket or folder with --folder. The command is the same for every destination:

# See what would be sent, and write nothing
filefortress files upload phone DCIM --to myS3 --folder backups/photos --recursive --dry-run

# Send a whole folder to Backblaze B2
filefortress files upload phone DCIM --to myB2 --folder my-bucket/photos/2024 --recursive

# Send to OneDrive or Google Drive, into a new folder at the top of the drive
filefortress files upload phone DCIM --to myOneDrive --folder "Baby Pix" --recursive --create-folder

# Copy to an external drive you added as a local remote
filefortress files upload phone DCIM --to archive --folder Archive/2024 --recursive

Typed at a terminal, FileFortress first shows a preview of every file - would send, already there, or not replaced - and then asks before it writes anything. Only y sends. In a script, add --non-interactive and check the exit code: it's an error if any file wasn't sent.

Folders are created for you below the bucket or top folder you name. What FileFortress won't do is invent the top level on a typo: it never creates a bucket, and a new top folder on OneDrive or Google Drive is only created when you ask for it with --create-folder (or + New folder… in the desktop app). When it's done, the destination is rescanned so the new files show up in search straight away.

What You Need First

The files must be on a local remote you have scanned, and the destination must be a remote you've already added with permission to write: S3 or Backblaze keys allowed to write, a OneDrive connection with write access, or a Google Drive remote added with full access. A read-only connection is refused before anything is sent, and the message says what's missing.

Create Only: Nothing Already There Is Touched

Most upload tools quietly overwrite a file with the same name. FileFortress doesn't. Before sending, it compares each file with the destination. A file that's already there with the same content is skipped. A file with the same name but different content is left exactly as it is and reported as not replaced - you decide what to do about it, not the tool.

This isn't only a check at preview time. Where the provider can enforce it, FileFortress asks it to: Amazon S3 is told to refuse an upload if the name is already taken, and OneDrive refuses an existing name for every upload. Even if a file appears at the destination between your preview and the send, it isn't replaced.

A send never deletes anything that was already there. The only thing it ever removes is its own unfinished upload - if you stop a send part-way, the half-sent file is cleaned up rather than left behind as a broken copy. (On Google Drive, Google discards the unfinished upload itself.) Files that had already arrived stay where they are; run the same command again and only the rest is sent.

Every File Checked, Every Result Labelled

"Upload finished" isn't the same as "the file arrived intact". So after sending, FileFortress compares each file with what the provider actually stored:

  • Amazon S3 - the checksum AWS stored for the file.
  • Backblaze B2 - the checksum Backblaze returns, or the size when it returns none.
  • OneDrive - OneDrive's quickXorHash checksum.
  • Google Drive - Google's SHA-256 checksum, then MD5, then size, whichever it reports.
  • A local folder - a SHA-256 checksum of what was read, compared with the copy read back from disk.

Then every file gets one plain label, the same in the CLI and the desktop app:

Sent

  • Checked by checksum - sent, and the stored checksum matches your file.
  • Checked by size only - sent; the provider gave no checksum, so the size was compared.
  • Failed - not sent, or what was stored doesn't match. The reason is shown.

Left alone

  • Already there, identical - same size and checksum.
  • Already there, same size; content not compared - and the result says so.
  • Exists but different — not replaced - left exactly as it was.
  • Not sent - skipped, with the reason.

A checksum match catches damage in transit. It is not a defence against someone deliberately tampering with your files, and we don't claim it is.

Or Click Send to Remote

In the desktop app, open a folder of a local remote in Files and click Send to remote in the toolbar. Pick the remote, then where the files go: a bucket for S3 and Backblaze, a folder for a local remote, or any folder at the top of your OneDrive or Google Drive - or + New folder… to make one. Add a subfolder if you like; the dialog shows exactly where the files will go.

You get the same preview, nothing is sent until you confirm, and you watch the progress live. Press Stop at any point. Hiding the window doesn't stop the send. When it finishes, each file shows the same label the CLI uses.

Private by Design

FileFortress sends with the keys or sign-in you saved for the remote, from your own computer. Your files never pass through FileFortress servers, and nothing about the transfer - file names, counts, or what was sent - is sent to them either.

The Fine Print, Stated Plainly

A promise like "never replaces" is only worth something if the limits are spelled out, so here they are:

  • Backblaze B2 and Google Drive can't refuse a name themselves. FileFortress looks for the name just before writing each file and only sends when it's free. If another app writes the same name at that very moment, nothing is replaced on Google Drive - both files are there - and on Backblaze your file becomes the newest version, with the other kept as an older version.
  • No resume. A file whose send was interrupted is sent again in full next time.
  • S3 cleanup needs AWS to be reachable. If FileFortress is killed or the computer shuts down mid-send, the parts of a large unfinished upload can stay behind, unseen but billed. A bucket lifecycle rule that removes incomplete uploads clears them.
  • Local remotes only, unencrypted only. Files are sent from a local remote, and encrypted remotes can't be sent from or to yet.
Keep Reading

Find it, pull it down, and now send it up - one tool for every cloud, and one that never overwrites what you already have.

Send It Up, Safely

Send files from your computer to S3, Backblaze B2, OneDrive, Google Drive or another drive - previewed first, never replacing what's there, checked once sent.