EDIT: Issues with attachment uploads when using a single bucket to store all data

(#3926) Bug Open: Awaiting confirmation media self-hosting

Reproduction steps

Instance Setup:
  • Latest update on the official docker image
  • External S3-compatible Object Storage
  • FLUXER_S3_FORCE_PATH_STYLE=true
  • COMPOSE_FILE=docker-compose.yml:external-object-store.compose.yml
additions:- Do not define; FLUXER_S3_BUCKET_CDN, FLUXER_S3_BUCKET_UPLOADS, FLUXER_S3_BUCKET_REPORTS and FLUXER_S3_BUCKET_HARVESTS´ instead directly reference your bucket in the url used for FLUXER_S3_ENDPOINT`. Reproduction:
  • Login with any account
  • Attempt to any message containing the following filetypes:
css,.pdf,.epub,.flatpakref,.txt, any office format files
  • Observe that the message appears to upload the file and then fails:
error-fileupload.png
  • Try to send another message containing any common; Image, Video or Audio Format
  • Observe that the Message sent successfully
Further Observation:
  • The files i attempted to upload arrived in the S3 under the fluxer-uploads/ prefix
  • The files did not end up as attachments in the fluxer/attachments/ prefix

Expected behaviour

Files upload as attachments.

Actual behaviour

Some files do not properly upload as attachments. Further testing shows that this behavior only occurs if a single bucket is set to host the files by directly being defined in the url used for FLUXER_S3_ENDPOINT. (This will only work if FLUXER_S3_FORCE_PATH_STYLE=true otherwise the fileupload fails) Setting different Buckets for FLUXER_S3_BUCKET_CDN, FLUXER_S3_BUCKET_UPLOADS, FLUXER_S3_BUCKET_REPORTS and `FLUXER_S3_BUCKET_HARVESTS´ fixes this behaviour.

Build information

Web: Canary Web 2026.1012.2059, Linux (x64), Firefox 157.0, Locale en-USDesktop: Canary Desktop 2026.1009.45608, Web 2026.1011.165018, Linux 7.2.9-100.fc43.x86_64 (x64), Electron 44.4.1, Chrome 152.0.7977.78, Node 24.21.0, Locale en-US

Platform

Self-hosting

Evidence

Logs:
  • Api Error:
     {
     "level":"error",
     "time":"2026-10-12T10:51:28.570Z",
     "service":"errors",
     "env":"production",
     "err":{
        "type":"NoSuchBucket",
        "message":"The specified bucket does not exist.",
        "stack":"NoSuchBucket: The specified bucket does not exist. 
            at S3RestXmlProtocol.handleError (/usr/src/app/fluxer_api/node_modules/.pnpm/@aws-sdk+core@3.978.0/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js:2834:27)
            at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
            at async S3RestXmlProtocol.deserializeResponse (/usr/src/app/fluxer_api/node_modules/.pnpm/@smithy+core@3.34.1/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js:365:13)
            at async /usr/src/app/fluxer_api/node_modules/.pnpm/@smithy+core@3.34.1/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js:23:24
            at async /usr/src/app/fluxer_api/node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.972.76/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/submodules/s3/index.js:365:20
            at async /usr/src/app/fluxer_api/node_modules/.pnpm/@smithy+core@3.34.1/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js:175:50
            at async /usr/src/app/fluxer_api/node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.972.76/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/submodules/s3/index.js:62:28
            at async /usr/src/app/fluxer_api/node_modules/.pnpm/@aws-sdk+middleware-sdk-s3@3.972.76/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/submodules/s3/index.js:89:20
            at async /usr/src/app/fluxer_api/node_modules/.pnpm/@aws-sdk+core@3.978.0/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js:125:26
            at async StorageService.copyObject (/usr/src/app/fluxer_api/src/api/infrastructure/StorageService.ts:492:4)",
        "$fault":"client",
        "$metadata" {
            "httpStatusCode":404,
            "requestId":"[REQUEST_ID]",
            "extendedRequestId":"[REQUEST_ID]",
            "attempts":1,"totalRetryDelay":0
            },
        "name":"NoSuchBucket",
        "Code":"NoSuchBucket",
        "RequestId":"[REQUEST_ID]",
        "BucketName":"fluxer-uploads"
        },
    "status":500,
    "method":"POST",
    "path":"/channels/:channel_id/messages","requestId":"[REQUEST_ID]",
    "msg":"Unhandled error occurred"
    }
    

1 comment

Sign in with Fluxer to comment and vote.
Comment by Rex
RexSystem 1 vote
Status changed from Needs triage to Awaiting confirmation
Fixed in the self-hosted api 2026.1012.140517: a single bucket set in FLUXER_S3_ENDPOINT now works for every file type, because server-side copies keep the bucket path from the endpoint.