From cd92b32d57d8bbd30712d238999948829a5206f4 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 16 Apr 2026 15:28:50 +0700 Subject: [PATCH] uploader first commit --- scripts/uploader.md | 100 ++++++++++++++++++++++++++++++++++++++++++++ scripts/uploader.py | 11 +++++ 2 files changed, 111 insertions(+) create mode 100644 scripts/uploader.md create mode 100644 scripts/uploader.py diff --git a/scripts/uploader.md b/scripts/uploader.md new file mode 100644 index 0000000..0a05d62 --- /dev/null +++ b/scripts/uploader.md @@ -0,0 +1,100 @@ +# Uploader + +File upload utility library for Bottle framework. + +## Description + +Simple file upload handler that saves files to a specified directory with optional renaming. + +## Usage + +### Import + +```python +from scripts import uploader +``` + +### Function Signature + +```python +uploader.upload(file, directory, new_name=None) +``` + +### Parameters + +| Parameter | Type | Required | Description | +|-----------|------|----------|-------------| +| `file` | FileStorage | Yes | File object from `request.files.get('field_name')` | +| `directory` | string | Yes | Target directory path (will be created if not exists) | +| `new_name` | string | No | New filename. If empty/None, uses original filename | + +### Returns + +```python +{ + "status": "success", + "path": "/full/path/to/saved/file.jpg" +} +``` + +On failure: + +```python +{ + "status": "failed", + "error": "Error message here" +} +``` + +## Examples + +### Basic Upload (Keep Original Filename) + +```python +from bottle import request +from scripts import uploader + +@app.route('/upload', method='POST') +def do_upload(): + file = request.files.get('file') + directory = '/var/www/uploads/' + + result = uploader.upload(file, directory) + + if result['status'] == 'success': + return f"File saved to: {result['path']}" + else: + return f"Upload failed: {result['error']}" +``` + +### Upload with Custom Filename + +```python +@app.route('/upload', method='POST') +def do_upload(): + file = request.files.get('file') + directory = '/var/www/uploads/' + new_name = "profile_picture.jpg" + + result = uploader.upload(file, directory, new_name) + + return result +``` + +### Using Generated Filename + +```python +import uuid + +@app.route('/upload', method='POST') +def do_upload(): + file = request.files.get('file') + directory = '/var/www/uploads/' + + ext = file.filename.split('.')[-1] + new_name = f"{uuid.uuid4()}.{ext}" + + result = uploader.upload(file, directory, new_name) + + return result +``` diff --git a/scripts/uploader.py b/scripts/uploader.py new file mode 100644 index 0000000..0f74600 --- /dev/null +++ b/scripts/uploader.py @@ -0,0 +1,11 @@ +import os +def upload(file, directory, new_name=None): + try: + os.makedirs(directory, exist_ok=True) + if not new_name: + new_name = file.filename + full_path = os.path.join(directory, new_name) + file.save(full_path) + return {"status": "success", "path": full_path} + except Exception as e: + return {"status": "failed", "error": str(e)}