mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-11-13 15:29:12 +01:00
fix(s3api): handle directory markers with custom Content-Type headers
Fixes #8712: S3 API directory markers created via PutObject with an explicit Content-Type header (e.g. application/octet-stream) were not appearing in ListObjects results. Root cause: The filer strips "application/octet-stream" from the Mime field during InsertEntry/UpdateEntry (filerstore_wrapper.go). This causes IsDirectoryKeyObject() to return false, so the directory markers are excluded from listings. Additionally, when AWS CLI includes a Content-Type header, it may use AWS chunked encoding. r.ContentLength then includes chunked overhead, which can exceed 1024 bytes even for zero-byte payloads, preventing the directory marker fast-path from triggering. Changes: - Use x-amz-decoded-content-length header for accurate payload size - Require actualContentLength >= 0 to reject unknown/negative lengths - Wrap body reader with io.LimitReader(1024+1) to prevent OOM - Reject payloads > 1024 bytes with HTTP 413 - Store MIME in ExtMimeType extended attribute for zero-byte markers (persists even when the filer strips the Mime field) - Update IsDirectoryKeyObject() to check ExtMimeType as fallback
This commit is contained in:
1 parent
cc781f57dc
commit
7e1c2c812f
3 files changed
+51
-5
No files matched your search
@@ -19,6 +19,7 @@ const (
|
||||
ExtLatestVersionOwnerKey = "Seaweed-X-Amz-Latest-Version-Owner"
|
||||
ExtLatestVersionIsDeleteMarker = "Seaweed-X-Amz-Latest-Version-Is-Delete-Marker"
|
||||
ExtMultipartObjectKey = "key"
|
||||
ExtMimeType = "Seaweed-X-Amz-Mime-Type"
|
||||
|
||||
// Bucket Policy
|
||||
ExtBucketPolicyKey = "Seaweed-X-Amz-Bucket-Policy"
|
||||
|
||||
Reference in new issue
Block a user