diff --git a/weed/s3api/s3api_object_handlers_list.go b/weed/s3api/s3api_object_handlers_list.go index c7971848d..2dfc9aec7 100644 --- a/weed/s3api/s3api_object_handlers_list.go +++ b/weed/s3api/s3api_object_handlers_list.go @@ -472,6 +472,9 @@ func buildTruncatedNextMarker(requestDir, prefix, nextMarker string, lastEntryWa } return requestDir + "/" + lastCommonPrefixName + "/" } + if prefix != "" { + return prefix + "/" + lastCommonPrefixName + "/" + } return lastCommonPrefixName + "/" } diff --git a/weed/s3api/s3api_object_handlers_list_test.go b/weed/s3api/s3api_object_handlers_list_test.go index 3258c2dfd..b8e1bb926 100644 --- a/weed/s3api/s3api_object_handlers_list_test.go +++ b/weed/s3api/s3api_object_handlers_list_test.go @@ -161,6 +161,11 @@ func TestBuildTruncatedNextMarker(t *testing.T) { actual := buildTruncatedNextMarker("xemu", "export_2026-02-10_17-00-23", "", true, "nested") assert.Equal(t, "xemu/export_2026-02-10_17-00-23/nested/", actual) }) + + t.Run("includes prefix for common prefix marker when request dir is empty", func(t *testing.T) { + actual := buildTruncatedNextMarker("", "foo", "", true, "bar") + assert.Equal(t, "foo/bar/", actual) + }) } func TestAllowUnorderedParameterValidation(t *testing.T) {