Repository navigation
feat(files): presigned part uploads to S3 object storage - #66176
Open
karlitschek wants to merge 1 commit into
Open
karlitschek wants to merge 1 commit into
karlitschek wants to merge 1 commit into
Conversation
karlitschek
force-pushed
the
feat/s3-presigned-part-uploads
branch
from
November 3, 2026 12:03
133832f to
54b26f9
Compare
karlitschek
marked this pull request as ready for review
November 3, 2026 12:05
karlitschek
requested review from
GhassenKefi,
come-nc,
icewind1991,
salmart-dev and
sorbaugh
and removed request for
a team
November 3, 2026 12:05
karlitschek
force-pushed
the
feat/s3-presigned-part-uploads
branch
3 times, most recently
from
November 3, 2026 19:45
64ad364 to
5aeb60d
Compare
A client (for example an importer) can now upload a file's content straight into the S3 bucket behind Nextcloud's object storage, keeping PHP out of the data path: the server starts a multipart upload, hands out one presigned request per part, and lists and completes the upload as before. Every part is signed with its SHA-256, so S3 refuses bytes that don't match it, and the bucket's credentials never leave the server. Configurations that would need a secret on the client (SSE-C keys) or can't sign a checksum (V2 signatures) say so. IObjectStoreStorage names the object store and the object of a file for callers outside the object store code, through storage wrappers. Assisted-by: ClaudeCode:claude-opus-5-5 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
karlitschek
force-pushed
the
feat/s3-presigned-part-uploads
branch
from
November 3, 2026 22:20
5aeb60d to
cc4eaf5
Compare
come-nc
reviewed
Nov 4, 2026
come-nc
left a comment
Contributor
There was a problem hiding this comment.
I do not know enough of s3 to review this.
My only input is that compatibility with encryption app should be double-checked.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Large imports and migrations into S3 primary storage currently push every byte through PHP. This lets a server-side caller have the content uploaded straight to the bucket instead, without the storage credentials ever leaving the server.
OCP\Files\ObjectStore\IObjectStorePresignedUpload(implemented by the S3 object store): start a multipart upload, hand out one presigned request per part, each bound to the part's SHA-256, then complete or abort it.OCP\Files\ObjectStore\IObjectStoreStorage: exposes the object store and the object id behind a file, through storage wrappers.Tests: unit tests, plus a real round trip against S3 (MinIO) in
S3Test.This draft description was written with AI assistance (Claude Code) at the author's request; the author reviews it before the PR leaves draft.
TODO
Checklist
3. to review, feature component)stable32)AI (if applicable)
This change was written with Claude Code (claude-opus-5-5) and is to be reviewed by the author before it leaves draft; every commit carries an
Assisted-bytrailer. Commits still need the author's sign-off (DCO).🤖 Generated with Claude Code