Fix URL when bucket is contained in endpoint #2
+45
−10
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.
TL;DR
This fixes a bug1 where the URL is constructed incorrectly in the case that the S3 host/endpoint already contains the bucket name in the URL and path-style URLs are enabled.
Example
Cloudflare R2 storage specifies an URL such as this:
https://12345foo.r2.cloudflarestorage.com/my-bucket
Since the bucket is specified in the URL given by Cloudflare, but also added at the end of the endpoint, this results in requests failing with
400 Bad Request
.What we did
We fixed this simply by checking whether the host ends in
/{bucket_name}
, and skipping inclusion of the bucket at the end if that's the case. We also added a test case to make sure the behavior works correctly and doesn't regress.Footnotes
I'm actually not 100% sure this is really a bug, but this fix makes life easier, especially for R2 users. ↩