mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-20 13:30:46 +02:00
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