コンテンツにスキップ
出品S3 Compatible Storageのメディア1
0 件のコメント

説明

S3CompatibleStorage turns cloud object storage into a couple of Blueprint nodes — for any S3-compatible provider, with the resumable, production-grade transfer behavior that "just works" everywhere from a solo player's save file to a live-service backend.

Drop the plugin into any project and point it at a bucket: no SDK to vendor, no third-party dependencies, no provider-specific code paths to maintain. Upload, download, list, tag, and manage buckets from Blueprint or C++ — the exact same API whether you're talking to Amazon S3, Cloudflare R2, Backblaze B2, Google Cloud Storage, MinIO, or Wasabi.

Why S3CompatibleStorage

Most S3 integrations force a trade-off: a thin wrapper that breaks the moment a real provider disagrees with AWS's exact behavior, or a full SDK dependency that drags in megabytes of code your project will never touch.

S3CompatibleStorage removes that trade-off. It's built and verified against six real, independently-tested providers — not just against Amazon's own documentation — and every provider-specific quirk it had to learn along the way (weak ETags, rewritten headers, addressing-style differences, lifecycle-rule dialects) is handled once, inside the plugin, so your gameplay code never has to know which provider it's actually talking to.

Resumable Transfers, Not Just Retries

A dropped connection doesn't mean starting over.

  • Interrupted uploads pick up exactly where they left off: the plugin remembers the multipart upload ID, asks the provider which parts already landed, and sends only what's missing.

  • Interrupted downloads resume too — a capability most storage plugins skip entirely. Bytes already on disk stay on disk; only the missing range is re-requested, and the file is only ever moved into place once it's actually complete.

  • Every resumed download is version-checked against the object it started from — a conditional request on the wire, backed up by an entity-tag comparison for providers that don't honor it — so an object that changed mid-transfer can never be silently stitched into a corrupted file. It fails loudly instead, with a diagnostic explaining exactly why.

One setting turns this on for uploads, one for downloads. Both default to on.

Six Providers, Verified Live — Not Just Documented

Every claim in this listing was proven against a real account on a real service, not assumed from a spec:

  • Amazon S3

  • Cloudflare R2

  • Backblaze B2

  • Google Cloud Storage

  • MinIO

  • Wasabi

Each one round-tripped uploads, downloads, byte-range reads, listings, batch deletes, server-side copies, tags, bucket lifecycle rules, presigned URLs, bucket creation/deletion, and resumable transfers against a live endpoint — with object keys containing spaces, ampersands, and non-Latin characters, because that's exactly what breaks a naive URL encoder. Where a provider's real behavior differs from the spec — R2's silent gzip transcoding, GCS rewriting Accept-Encoding, Backblaze's stricter lifecycle rules — the plugin works around it, and the documentation says so, by name, rather than leaving you to discover it in production. DigitalOcean Spaces and any other S3-compatible service are supported the same way via a Custom provider preset.

Everything a Storage-Backed Feature Needs

  • Upload a file from disk or bytes from memory, with automatic parallel multipart for anything large — memory cost stays proportional to concurrency, not to file size, so a 2 GB upload costs a handful of megabytes of RAM, not two gigabytes.

  • Download to disk with real byte-level progress, into memory, as one explicit byte range, or as a chunked, resumable sequence.

  • List a bucket with folder-style delimiters and pagination, or list every bucket the account owns.

  • Copy an object entirely server-side — the bytes never touch the caller.

  • Tag objects, and separately manage user metadata — two different namespaces for two different needs: metadata fixed at write time, tags changeable any time without rewriting the object.

  • Manage a bucket's whole lifecycle: automatic cleanup of interrupted multipart uploads in one node, or a full custom rule set with prefix, tag, and age filters.

  • Create and delete buckets — deletion is refused, with a clear reason, if the bucket still has anything in it; the plugin will never silently empty one for you.

  • Batch-delete any number of keys, chunked into requests of a thousand automatically, with per-key partial-failure reporting.

  • Generate presigned URLs, signed entirely locally — no network round trip, so it costs nothing and can't fail.

Every one of these is one Blueprint node, mirrored one-to-one in C++.

Credentials That Fit Where the Code Runs

Six distinct ways to supply credentials, because a single-player save game, a dedicated server, and a live-service backend have nothing in common security-wise:

  • Environment variables, for a build server or a dedicated server with a controlled environment.

  • A local, encrypted, per-user credential store, for a desktop application where the bucket belongs to whoever's running it.

  • Typed directly into Project Settings, for the simplest possible setup during development.

  • Runtime-supplied, short-lived credentials with automatic expiry handling — the shape a shipping game client should actually use: your backend authenticates the player and hands over scoped, temporary keys, so nothing long-lived ever ships inside the build.

  • Anonymous, for public buckets and presigned-URL-only flows.

  • Storage Profile assets, for a project that talks to more than one bucket or provider at once — a save-file bucket and an analytics bucket, say — each with its own independently cached client.

Errors That Tell You What to Fix

A failed request doesn't just hand back an HTTP status code. Every result carries a coarse, Blueprint-switchable outcome, the provider's own machine-readable error code, and — where the plugin can work it out — a plain-language diagnostic hint naming the exact setting to change: wrong addressing style, wrong region, a clock that's drifted, a bucket that isn't empty. A signature rejected because of a stray space in the secret key and one rejected because of the wrong region show up as two different, specific messages — not one generic "signature mismatch."

Debug Console Included

An optional debug module, present in Development builds and stripped entirely from Shipping, gives testers and programmers a live look at what the plugin is actually doing:

  • Console commands to upload, download, list, and delete without writing a test level.

  • A rolling log of the last 200 completed requests — method, status, timing, retry count — for "something broke, what happened" reports.

  • A live view of every interrupted transfer remembered on the machine, upload and download side, and exactly how far each one got.

Built and Tested Like Production Code, Not a Demo

Every operation is covered by an automated test suite — offline tests running against a scripted fake transport for fast, deterministic coverage of retries, cancellation, and edge cases no real service would reliably reproduce on demand, plus a live-provider suite that opts in with a single environment variable and proves the same behavior against real accounts. Nothing in this listing is aspirational: if a feature is described here, it has a passing test behind it, on all six providers.

What's in the Box

Runtime Core

  • Upload, download, and chunked/resumable transfer operations

  • Bucket and object management: create, delete, list, copy, tag, metadata

  • Bucket lifecycle rules and incomplete-upload cleanup

  • Presigned URL generation

  • Six credential-source strategies, plus Storage Profile assets

  • Full progress reporting and cancellation on every transfer

Optional Debug Module

  • Cheat console commands

  • Request log and resume-record inspection

Fully isolated from the runtime core — a Shipping build never carries a byte of it.

Complete Documentation

Comprehensive documentation covering everything from quick setup, credentials, and Blueprint operations to file transfers, C++ API usage, error diagnostics, provider specifics, testing, deployment, debug tools, FAQs, and real-world cookbooks — published and kept in sync with every release.

含まれる形式