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