Neptune provides S3-compatible storage buckets for storing files, images, and other assets. Under the hood, these are AWS S3 buckets that your application can access using standard AWS SDKs.
Creates an S3 bucket with a physical name (e.g., neptune-abc123-uploads) for global uniqueness
Configures all necessary IAM permissions so your running service can access it
Returns the physical bucket name to your AI assistant
The physical bucket name is different from the logical name you define in neptune.json. For example, if you name your bucket uploads, the actual AWS bucket might be called neptune-abc123-uploads.
All permissions are pre-configured, so you can use boto3 (or other AWS SDKs) out of the box without any credential configuration.
Python
Node.js
Rust
Copy
import boto3# Your AI assistant will provide this physical bucket nameBUCKET_NAME = "neptune-abc123-uploads"s3 = boto3.client("s3")# Upload a files3.put_object( Bucket=BUCKET_NAME, Key="images/photo.jpg", Body=file_data)# Download a fileresponse = s3.get_object(Bucket=BUCKET_NAME, Key="images/photo.jpg")data = response['Body'].read()# List filesresponse = s3.list_objects_v2(Bucket=BUCKET_NAME)for obj in response.get('Contents', []): print(obj['Key'])
Copy
import { S3Client, PutObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3';// Your AI assistant will provide this physical bucket nameconst BUCKET_NAME = 'neptune-abc123-uploads';// No credentials needed - permissions are pre-configuredconst s3 = new S3Client({ region: 'eu-west-2' });// Upload a fileawait s3.send(new PutObjectCommand({ Bucket: BUCKET_NAME, Key: 'images/photo.jpg', Body: fileBuffer, ContentType: 'image/jpeg',}));// Download a fileconst response = await s3.send(new GetObjectCommand({ Bucket: BUCKET_NAME, Key: 'images/photo.jpg',}));
Copy
use aws_sdk_s3::Client;// Your AI assistant will provide this physical bucket namelet bucket_name = "neptune-abc123-uploads";// Load config from environment (credentials pre-configured)let config = aws_config::load_from_env().await;let client = Client::new(&config);// Uploadclient.put_object() .bucket(bucket_name) .key("images/photo.jpg") .body(data.into()) .send() .await?;
Your AI assistant knows the physical bucket name after provisioning and can write the code for you with the correct bucket name already filled in.