Skip to content

S3 Storage

The S3 view in Floci Studio is a full object browser: create buckets, browse the object tree, upload content, preview objects, and generate presigned URLs.

  1. Click S3 in the sidebar.
  2. Click Create Bucket.
  3. Enter a bucket name (e.g., my-app-assets). Bucket names must be globally unique within your local emulator.
  4. Click Create.

Click a bucket to open the object browser. Use the prefix filter to navigate folder paths (e.g., invoices/2024/).

In the bucket detail view, click Upload Object. You can:

  • Drag and drop a file
  • Paste a JSON / text payload directly
  • Set a custom Content-Type

Click any object to preview its content. Text, JSON, and images render inline.

Right-click any object (or click the action menu) and select Generate Presigned URL. Set the expiry duration in seconds. The URL is copied to your clipboard and works like a real AWS presigned URL against the local endpoint.

import boto3
s3 = boto3.client(
"s3", endpoint_url="http://localhost:4566",
region_name="us-east-1",
aws_access_key_id="test", aws_secret_access_key="test",
use_path_style_endpoint=True, # required for LocalStack-compatible endpoints
)
# Create bucket
s3.create_bucket(Bucket="my-app-assets")
# Upload
s3.put_object(Bucket="my-app-assets", Key="invoices/4419.pdf",
Body=b"%PDF...", ContentType="application/pdf")
# Download
obj = s3.get_object(Bucket="my-app-assets", Key="invoices/4419.pdf")
content = obj["Body"].read()
# Presigned URL (valid for 1 hour)
url = s3.generate_presigned_url(
"get_object",
Params={"Bucket": "my-app-assets", "Key": "invoices/4419.pdf"},
ExpiresIn=3600,
)
# List objects
resp = s3.list_objects_v2(Bucket="my-app-assets", Prefix="invoices/")
for obj in resp.get("Contents", []):
print(obj["Key"], obj["Size"])

If you need S3-compatible storage with a dedicated UI, deploy the Minio recipe from the Marketplace. Minio exposes the S3 API on port 9000 and a web console on 9001.