Quat Docs

Troubleshooting

Fix common Quat, S3 SDK, CORS, and framework integration issues.

Signature Mismatch

Symptom

SDK calls fail with SignatureDoesNotMatch.

Likely Cause

The endpoint, region, key pair, or path-style setting does not match the storage deployment.

Fix

Use the same values in every application:

S3_ENDPOINT=https://storage.example.local
S3_REGION=us-east-1
S3_USE_PATH_STYLE_ENDPOINT=true

Regenerate credentials in Quat if you are unsure whether the secret key is current.

Endpoint Connection Errors

Symptom

SDK calls fail with connection refused, DNS errors, or TLS errors.

Likely Cause

The app is using the customer console URL instead of the object storage endpoint, or TLS/DNS is not configured for the endpoint.

Fix

Use the S3-compatible storage endpoint. Do not use http://localhost:3000 unless your storage endpoint is actually running there.

Bucket Not Found

Symptom

SDK calls return NoSuchBucket.

Likely Cause

The app used a friendly display name instead of the actual bucket name, or the bucket belongs to another account.

Fix

Open the bucket in Quat and copy the real bucket name from bucket details.

Access Denied

Symptom

SDK calls return AccessDenied or InvalidAccessKeyId.

Likely Cause

The subscription is inactive, credentials were regenerated, or the key pair is wrong.

Fix

Check Billing and Settings > API Keys. Reveal or regenerate credentials and update application secrets.

CORS Issues

Symptom

Browser uploads or downloads fail with a CORS error.

Likely Cause

The bucket CORS policy does not allow the browser origin, method, or headers.

Fix

Open the bucket CORS tab and add a rule:

{
    "AllowedOrigins": ["https://app.example.com"],
    "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
    "AllowedHeaders": ["*"],
    "ExposeHeaders": ["ETag"],
    "MaxAgeSeconds": 3600
}

Large File Upload Issues

Symptom

The console rejects a file upload.

Likely Cause

The selected file is empty or larger than the console upload limit.

Fix

The customer app limits console uploads to 5 GB. For larger files, confirm whether your storage deployment supports multipart uploads and use an SDK flow designed for multipart upload.

Path-Style Vs Virtual-Hosted-Style

Symptom

The SDK tries to call https://my-bucket.storage.example.local and fails DNS or TLS validation.

Likely Cause

The SDK is using virtual-hosted-style addressing.

Fix

Enable path-style addressing:

forcePathStyle: true;
Config(s3={"addressing_style": "path"})
"use_path_style_endpoint" => true

Laravel Issues

Symptom

Laravel says it cannot write a file, but the cause is unclear.

Fix

Enable thrown filesystem exceptions and clear cached config:

'throw' => true,
php artisan config:clear
php artisan cache:clear

Node.js Issues

Symptom

CredentialsProviderError or empty key errors.

Fix

Load environment variables before creating the S3 client and validate required values at startup.

if (!process.env.S3_ACCESS_KEY || !process.env.S3_SECRET_KEY) {
    throw new Error("Missing S3 credentials");
}

Python boto3 Issues

Symptom

NoCredentialsError.

Fix

Call load_dotenv() before constructing the boto3 client, or configure credentials in your deployment secret manager.

from dotenv import load_dotenv

load_dotenv()

On this page