NexQloud Object Storage is fully S3-compatible. Use standard tools like boto3 (Python) and aws-cli to interact with your buckets programmatically.
| Property | Value |
|---|---|
| Endpoint | https://storage.dcp.nexqloud.net |
| Region | auto |
| Signature | AWS Signature V4 |
| Path Style | Required (s3ForcePathStyle: true) |
| Operation | Supported |
|---|---|
| ListBuckets | ✓ |
| ListObjects | ✓ |
| GetObject | ✓ |
| PutObject | ✓ |
| DeleteObject | ✓ |
| HeadObject | ✓ |
| HeadBucket | ✓ |
| CopyObject | ✓ |
| CreateMultipartUpload | ✓ |
| UploadPart | ✓ |
| CompleteMultipartUpload | ✓ |
| AbortMultipartUpload | ✓ |
| ListParts | ✓ |
pip install boto3
import boto3
s3 = boto3.client(
's3',
endpoint_url='https://storage.dcp.nexqloud.net',
aws_access_key_id='NQAK_YOUR_ACCESS_KEY_ID',
aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',
region_name='auto'
)
response = s3.list_buckets()
for bucket in response['Buckets']:
print(bucket['Name'])
# Upload from file
s3.upload_file('local-file.txt', 'my-bucket', 'remote-file.txt')
# Upload from bytes
s3.put_object(
Bucket='my-bucket',
Key='data.json',
Body=b'{"hello": "world"}',
ContentType='application/json'
)
# Download to file
s3.download_file('my-bucket', 'remote-file.txt', 'local-file.txt')
# Read into memory
response = s3.get_object(Bucket='my-bucket', Key='data.json')
content = response['Body'].read()
response = s3.list_objects_v2(Bucket='my-bucket')
for obj in response.get('Contents', []):
print(f"{obj['Key']} ({obj['Size']} bytes)")
s3.delete_object(Bucket='my-bucket', Key='remote-file.txt')
For files larger than 5 GB, use multipart upload:
from boto3.s3.transfer import TransferConfig
# Configure multipart threshold (5 GB)
config = TransferConfig(
multipart_threshold=5 * 1024 * 1024 * 1024,
multipart_chunksize=100 * 1024 * 1024 # 100 MB chunks
)
s3.upload_file(
'large-file.bin',
'my-bucket',
'large-file.bin',
Config=config
)
url = s3.generate_presigned_url(
'get_object',
Params={'Bucket': 'my-bucket', 'Key': 'file.txt'},
ExpiresIn=3600 # URL valid for 1 hour
)
print(url)
# macOS
brew install awscli
# Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && sudo ./aws/install
# pip
pip install awscli
Create a named profile for NexQloud:
aws configure --profile nexqloud
Enter the following when prompted:
AWS Access Key ID: NQAK_YOUR_ACCESS_KEY_ID
AWS Secret Access Key: YOUR_SECRET_ACCESS_KEY
Default region name: auto
Default output format: json
aws s3 ls --endpoint-url https://storage.dcp.nexqloud.net --profile nexqloud
aws s3 cp local-file.txt s3://my-bucket/remote-file.txt \
--endpoint-url https://storage.dcp.nexqloud.net \
--profile nexqloud
aws s3 cp s3://my-bucket/remote-file.txt local-file.txt \
--endpoint-url https://storage.dcp.nexqloud.net \
--profile nexqloud
aws s3 ls s3://my-bucket/ \
--endpoint-url https://storage.dcp.nexqloud.net \
--profile nexqloud
aws s3 sync ./local-folder s3://my-bucket/prefix/ \
--endpoint-url https://storage.dcp.nexqloud.net \
--profile nexqloud
aws s3 rm s3://my-bucket/remote-file.txt \
--endpoint-url https://storage.dcp.nexqloud.net \
--profile nexqloud
aws s3 presign s3://my-bucket/file.txt \
--expires-in 3600 \
--endpoint-url https://storage.dcp.nexqloud.net \
--profile nexqloud
Common error responses:
| HTTP Code | Error | Cause |
|---|---|---|
| 403 | SignatureDoesNotMatch | Invalid secret key or incorrect signing |
| 403 | AccessDenied | Key does not have permission for this bucket |
| 404 | NoSuchBucket | Bucket does not exist or is not accessible |
| 404 | NoSuchKey | Object key does not exist |
| 400 | InvalidBucketName | Bucket name violates naming rules |
endpoint_url / --endpoint-url — without it, requests go to AWS instead of NexQloudregion_name='auto' — NexQloud uses a single global regionexport AWS_ACCESS_KEY_ID=NQAK_YOUR_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY
export AWS_ENDPOINT_URL=https://storage.dcp.nexqloud.net