Skip to content

Upload Your Data says the proxy writes to any backend, but multipart uploads only work on S3 #48

Open

Description

@tylere

Upload Your Data says a product's data may be stored with Amazon S3, Google Cloud Storage, Azure Blob Storage, Cloudflare R2 and others, and that "you always upload to the same proxy address, and the proxy writes to the right place."

For products stored in Azure Blob Storage or Google Cloud Storage, that's only partly true. The data proxy uses multistore 0.8.0, which refuses these operations on any backend that isn't S3:

  • Multipart upload (create, upload part, complete, abort): require_s3_backend returns "operation not supported for '' backends" (multistore/src/proxy.rs, require_s3_backend).
  • aws-chunked streaming uploads: rejected for non-S3 backends (try_streaming_forward).
  • Server-side copy (CopyObject): rejected by require_s3_backend.
  • Batch delete (DeleteObjects): returns NotImplemented.

Single-request GET, HEAD, PUT and DELETE, and LIST, work on every backend. They go through object_store's native S3, Azure and GCS backends. Cloudflare R2 reaches the proxy through the S3 backend, so it isn't affected.

The AWS CLI and boto3 switch to multipart upload above a size threshold. If that threshold is in the low megabytes, as I believe it is but haven't checked against the AWS docs, then following Upload with the Source CLI for a large file on an Azure-backed product would fail. aws s3 mv, aws s3 sync --delete and copies within the bucket might fail as well.

To decide:

  1. Do Azure- or GCS-backed products accept uploads through the proxy in practice, or are uploads only ever enabled for S3-backed products?
  2. If they do, the upload pages should say which operations aren't available, and how large files should be uploaded to those products.
  3. If they don't, the sentence about the proxy writing to the right place should be limited to reads, or say which products accept uploads.

🤖 Generated with Claude Code

Activity

  1. tylere commented on Oct 24, 2026

    @tylere
    ContributorAuthor

    @alukach could you weigh in on how the docs should describe this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions