235 lines
5.7 KiB
Markdown
235 lines
5.7 KiB
Markdown
# Download API Documentation
|
|
|
|
This document describes the download APIs added to your Flask application for downloading video and audio files from the system.
|
|
|
|
## Available Endpoints
|
|
|
|
### 1. Download Video File
|
|
**Endpoint:** `GET /download/video/<filename>`
|
|
|
|
**Description:** Download a video file from the system
|
|
|
|
**Parameters:**
|
|
- `filename` (path parameter): The name of the video file to download
|
|
- `directory` (query parameter, optional): Custom directory path (default: `/mnt/docker/resource`)
|
|
|
|
**Example:**
|
|
```bash
|
|
curl -O "http://localhost:5000/download/video/scene_one.mp4"
|
|
curl -O "http://localhost:5000/download/video/scene_one.mp4?directory=/custom/path"
|
|
```
|
|
|
|
**Response:**
|
|
- Success: File download with appropriate MIME type
|
|
- Error: JSON with error message and HTTP status code
|
|
|
|
---
|
|
|
|
### 2. Download Audio File
|
|
**Endpoint:** `GET /download/audio/<filename>`
|
|
|
|
**Description:** Download an audio file from the system
|
|
|
|
**Parameters:**
|
|
- `filename` (path parameter): The name of the audio file to download
|
|
- `directory` (query parameter, optional): Custom directory path (default: `/mnt/docker/resource`)
|
|
|
|
**Example:**
|
|
```bash
|
|
curl -O "http://localhost:5000/download/audio/output.wav"
|
|
curl -O "http://localhost:5000/download/audio/output.wav?directory=/custom/path"
|
|
```
|
|
|
|
---
|
|
|
|
### 3. Download Generated Video
|
|
**Endpoint:** `GET /download/generated/video/<uuid>`
|
|
|
|
**Description:** Download a generated video file by UUID
|
|
|
|
**Parameters:**
|
|
- `uuid` (path parameter): The unique identifier for the generated video
|
|
- `task_id` (query parameter, optional): Alternative task identifier
|
|
|
|
**Example:**
|
|
```bash
|
|
curl -O "http://localhost:5000/download/generated/video/5"
|
|
curl -O "http://localhost:5000/download/generated/video/5?task_id=123"
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Download Generated Audio
|
|
**Endpoint:** `GET /download/generated/audio/<uuid>`
|
|
|
|
**Description:** Download a generated audio file by UUID
|
|
|
|
**Parameters:**
|
|
- `uuid` (path parameter): The unique identifier for the generated audio
|
|
|
|
**Example:**
|
|
```bash
|
|
curl -O "http://localhost:5000/download/generated/audio/5"
|
|
```
|
|
|
|
---
|
|
|
|
### 5. List Available Files
|
|
**Endpoint:** `GET /list/files`
|
|
|
|
**Description:** List available files in the system for download
|
|
|
|
**Parameters:**
|
|
- `directory` (query parameter, optional): Directory to list files from (default: `/mnt/docker/resource`)
|
|
- `type` (query parameter, optional): Filter by file type - `video`, `audio`, or `all` (default: `all`)
|
|
|
|
**Example:**
|
|
```bash
|
|
curl "http://localhost:5000/list/files"
|
|
curl "http://localhost:5000/list/files?type=video"
|
|
curl "http://localhost:5000/list/files?type=audio&directory=/custom/path"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"directory": "/mnt/docker/resource",
|
|
"total_files": 3,
|
|
"files": [
|
|
{
|
|
"filename": "scene_one.mp4",
|
|
"size": 1048576,
|
|
"type": "video",
|
|
"modified": 1691234567,
|
|
"download_url_video": "/download/video/scene_one.mp4",
|
|
"download_url_audio": null
|
|
},
|
|
{
|
|
"filename": "output.wav",
|
|
"size": 524288,
|
|
"type": "audio",
|
|
"modified": 1691234568,
|
|
"download_url_video": null,
|
|
"download_url_audio": "/download/audio/output.wav"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### 6. List Generated Files by UUID
|
|
**Endpoint:** `GET /list/generated/<uuid>`
|
|
|
|
**Description:** List generated files for a specific UUID
|
|
|
|
**Parameters:**
|
|
- `uuid` (path parameter): The unique identifier to search for generated files
|
|
|
|
**Example:**
|
|
```bash
|
|
curl "http://localhost:5000/list/generated/5"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"uuid": "5",
|
|
"total_files": 2,
|
|
"generated_files": [
|
|
{
|
|
"type": "audio",
|
|
"filename": "5output.wav",
|
|
"path": "/mnt/docker/resource/5output.wav",
|
|
"download_url": "/download/generated/audio/5"
|
|
},
|
|
{
|
|
"type": "video",
|
|
"filename": "5output.mp4",
|
|
"path": "/mnt/docker/resource/5output.mp4",
|
|
"download_url": "/download/generated/video/5"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Error Responses
|
|
|
|
All endpoints return JSON error responses with appropriate HTTP status codes:
|
|
|
|
```json
|
|
{
|
|
"error": "Error message describing what went wrong"
|
|
}
|
|
```
|
|
|
|
Common HTTP status codes:
|
|
- `200`: Success
|
|
- `400`: Bad request (invalid file type, etc.)
|
|
- `404`: File not found
|
|
- `500`: Internal server error
|
|
|
|
## File Type Support
|
|
|
|
**Video formats:** `.mp4`, `.avi`, `.mov`, `.mkv`, `.wmv`, `.flv`, `.webm`
|
|
|
|
**Audio formats:** `.wav`, `.mp3`, `.aac`, `.flac`, `.ogg`, `.m4a`, `.wma`
|
|
|
|
## Security Notes
|
|
|
|
- File paths are validated to prevent directory traversal attacks
|
|
- Only files with recognized video/audio extensions are downloadable
|
|
- Files must exist in the specified directory to be downloaded
|
|
|
|
## Usage Examples
|
|
|
|
### Python Example
|
|
```python
|
|
import requests
|
|
|
|
# List all files
|
|
response = requests.get("http://localhost:5000/list/files")
|
|
files = response.json()
|
|
|
|
# Download a specific video
|
|
response = requests.get("http://localhost:5000/download/video/scene_one.mp4")
|
|
if response.status_code == 200:
|
|
with open("downloaded_video.mp4", "wb") as f:
|
|
f.write(response.content)
|
|
|
|
# Download generated audio by UUID
|
|
response = requests.get("http://localhost:5000/download/generated/audio/5")
|
|
if response.status_code == 200:
|
|
with open("generated_audio.wav", "wb") as f:
|
|
f.write(response.content)
|
|
```
|
|
|
|
### JavaScript Example
|
|
```javascript
|
|
// List files
|
|
fetch('/list/files')
|
|
.then(response => response.json())
|
|
.then(data => console.log(data));
|
|
|
|
// Download file
|
|
fetch('/download/video/scene_one.mp4')
|
|
.then(response => response.blob())
|
|
.then(blob => {
|
|
const url = window.URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = 'scene_one.mp4';
|
|
a.click();
|
|
});
|
|
```
|
|
|
|
## Testing
|
|
|
|
Use the provided test script to verify the APIs:
|
|
|
|
```bash
|
|
python test_download_api.py
|
|
```
|
|
|
|
Make sure your Flask server is running on port 5000 before testing.
|