diff --git a/app/config.py b/app/config.py index bbfbcdbd..d0cf6d48 100644 --- a/app/config.py +++ b/app/config.py @@ -21,6 +21,7 @@ class Settings(BaseSettings): nextcloud_upload_url: str nextcloud_username: str nextcloud_password: str + nextcloud_folder: str paperless_ngx_url: str paperless_ngx_api_token: str paperless_host: str diff --git a/app/tasks/upload_to_nextcloud.py b/app/tasks/upload_to_nextcloud.py index 57b36f43..b1fc0d27 100644 --- a/app/tasks/upload_to_nextcloud.py +++ b/app/tasks/upload_to_nextcloud.py @@ -1,11 +1,36 @@ #!/usr/bin/env python3 +import os +import requests from app.config import settings from app.tasks.retry_config import BaseTaskWithRetry from app.celery_app import celery @celery.task(base=BaseTaskWithRetry) def upload_to_nextcloud(file_path: str): - """Simulate uploading a file to Nextcloud.""" - print(f"[INFO] Simulating upload to Nextcloud: {file_path}") - return {"status": "Completed", "file": file_path} + """Uploads a file to Nextcloud in the configured folder.""" + + if not os.path.exists(file_path): + raise FileNotFoundError(f"File not found: {file_path}") + + # Extract filename + filename = os.path.basename(file_path) + + # Construct the full upload URL + nextcloud_url = f"{settings.NEXTCLOUD_UPLOAD_URL}/{settings.NEXTCLOUD_FOLDER}/{filename}" + + # Read file content + with open(file_path, "rb") as file_data: + response = requests.put( + nextcloud_url, + auth=(settings.NEXTCLOUD_USERNAME, settings.NEXTCLOUD_PASSWORD), + data=file_data + ) + + # Check if upload was successful + if response.status_code in (200, 201): + print(f"[INFO] Successfully uploaded {filename} to Nextcloud.") + return {"status": "Completed", "file": file_path} + else: + print(f"[ERROR] Failed to upload {filename} to Nextcloud: {response.status_code}, {response.text}") + raise Exception(f"Upload failed: {response.status_code} - {response.text}")