Vladimir Ivić
|
f7161611c6
|
feat: adding endpoints for files and uploads (#1070)
Summary:
Adds spec definitions for file uploads operations.
This API focuses around two high level operations:
* Initiating and managing upload session
* Accessing uploaded file information
Usage examples:
To start a file upload session:
```
curl -X POST https://localhost:8321/v1/files \
-d '{
"key": "image123.jpg',
"bucket": "images",
"mime_type": "image/jpg",
"size": 12345
}'
# Returns
{
“id”: <session_id>
“url”: “https://localhost:8321/v1/files/session:<session_id>”,
"offset": 0,
"size": 12345
}
```
To upload file content to an existing session
```
curl -i -X POST "https://localhost:8321/v1/files/session:<session_id> \
--data-binary @<path_to_local_file>
# Returns
{
"key": "image123.jpg",
"bucket": "images",
"mime_type": "image/jpg",
"bytes": 12345,
"created_at": 1737492240
}
# Implementing on server side (Flask example for simplicity):
@app.route('/uploads/{upload_id}', methods=['POST'])
def upload_content_to_session(upload_id):
try:
# Get the binary file data from the request body
file_data = request.data
# Save the file to disk
save_path = f"./uploads/{upload_id}"
with open(save_path, 'wb') as f:
f.write(file_data)
return {__uploaded_file_json__}, 200
except Exception as e:
return 500
```
To read information about an existing upload session
```
curl -i -X GET "https://localhost:8321/v1/files/session:<session_id>
# Returns
{
“id”: <session_id>
“url”: “https://localhost:8321/v1/files/session:<session_id>”,
"offset": 1024,
"size": 12345
}
```
To list buckets
```
GET /files
# Returns
{
"data": [
{"name": "bucket1"},
{"name": "bucket2"},
]
}
```
To list all files in a bucket
```
GET /files/{bucket}
# Returns
{
"data": [
{
"key": "shiba.jpg",
"bucket": "dogs",
"mime_type": "image/jpg",
"bytes": 82334,
"created_at": 1737492240,
},
{
"key": "persian_cat.jpg",
"mime_type": "image/jpg",
"bucket": "cats",
"bytes": 39924,
"created_at": 1727493440,
},
]
}
```
To get specific file info
```
GET /files/{bucket}/{key}
{
"key": "shiba.jpg",
"bucket": "dogs",
"mime_type": "image/jpg",
"bytes": 82334,
"created_at": 1737492240,
}
```
To delete specific file
```
DELETE /files/{bucket}/{key}
{
"key": "shiba.jpg",
"bucket": "dogs",
"mime_type": "image/jpg",
"bytes": 82334,
"created_at": 1737492240,
}
```
|
2025-02-20 13:09:00 -08:00 |
|