# Storage Configuration FileCodeBox supports multiple storage backends. You can choose the appropriate storage method based on your needs. This document details the configuration methods for various storage backends. ## Storage Types Overview | Storage Type | Config Value | Description | |--------------|--------------|-------------| | Local Storage | `local` | Default storage method, files saved on local server | | S3-Compatible Storage | `s3` | Supports AWS S3, Aliyun OSS, MinIO, etc. | | OneDrive | `onedrive` | Microsoft OneDrive cloud storage (work/school accounts only) | | WebDAV | `webdav` | Storage services supporting WebDAV protocol | | OpenDAL | `opendal` | Integrate more storage services via OpenDAL | ## Local Storage Local storage is the default storage method. Files are saved in the server's `data/` directory. ### Configuration Parameters | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `file_storage` | string | `local` | Storage type | | `storage_path` | string | `""` | Custom storage path (optional) | ### Configuration Example ```bash file_storage=local storage_path= ``` ### Notes - Files are stored by default in `data/share/data/` directory - Subdirectories are automatically created by date: `year/month/day/fileID/` - In production, it's recommended to mount the `data/` directory to persistent storage ## S3-Compatible Storage Supports all S3-compatible object storage services, including AWS S3, Aliyun OSS, MinIO, Tencent Cloud COS, etc. ### Configuration Parameters | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `file_storage` | string | - | Set to `s3` | | `s3_access_key_id` | string | `""` | Access Key ID | | `s3_secret_access_key` | string | `""` | Secret Access Key | | `s3_bucket_name` | string | `""` | Bucket name | | `s3_endpoint_url` | string | `""` | S3 endpoint URL | | `s3_region_name` | string | `auto` | Region name | | `s3_signature_version` | string | `s3v2` | Signature version (`s3v2` or `s3v4`) | | `s3_hostname` | string | `""` | S3 hostname (alternative) | | `s3_proxy` | int | `0` | Download through server proxy (1=yes, 0=no) | | `aws_session_token` | string | `""` | AWS session token (optional) | ### AWS S3 Configuration Example ```bash file_storage=s3 s3_access_key_id=AKIAIOSFODNN7EXAMPLE s3_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY s3_bucket_name=my-filecodebox-bucket s3_endpoint_url=https://s3.amazonaws.com s3_region_name=us-east-1 s3_signature_version=s3v4 ``` ### Aliyun OSS Configuration Example ```bash file_storage=s3 s3_access_key_id=YourAccessKeyId s3_secret_access_key=YourSecretAccessKey s3_bucket_name=bucket-name s3_endpoint_url=https://bucket-name.oss-cn-hangzhou.aliyuncs.com s3_region_name=oss-cn-hangzhou s3_signature_version=s3v4 ``` ::: tip Aliyun OSS Endpoint Format Endpoint URL format: `https://..aliyuncs.com` Common regions: - Hangzhou: `oss-cn-hangzhou` - Shanghai: `oss-cn-shanghai` - Beijing: `oss-cn-beijing` - Shenzhen: `oss-cn-shenzhen` ::: ### MinIO Configuration Example ```bash file_storage=s3 s3_access_key_id=minioadmin s3_secret_access_key=minioadmin s3_bucket_name=filecodebox s3_endpoint_url=http://localhost:9000 s3_region_name=us-east-1 s3_signature_version=s3v4 ``` ::: warning MinIO Notes - `s3_endpoint_url` should be the MinIO API interface address - `s3_region_name` should match the `Server Location` in MinIO configuration - Ensure the bucket is created and has correct access permissions ::: ### Tencent Cloud COS Configuration Example ```bash file_storage=s3 s3_access_key_id=YourSecretId s3_secret_access_key=YourSecretKey s3_bucket_name=bucket-name-1250000000 s3_endpoint_url=https://cos.ap-guangzhou.myqcloud.com s3_region_name=ap-guangzhou s3_signature_version=s3v4 ``` ### Proxy Download When `s3_proxy=1`, file downloads are proxied through the server instead of directly from S3. This is useful when: - S3 bucket doesn't allow public access - Need to hide the actual storage address - Network environment restricts direct S3 access ## OneDrive Storage OneDrive storage supports saving files to Microsoft OneDrive cloud storage. ::: warning Important Limitation OneDrive storage **only supports work or school accounts** and requires admin permissions to authorize the API. Personal accounts cannot use this feature. ::: ### Configuration Parameters | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `file_storage` | string | - | Set to `onedrive` | | `onedrive_domain` | string | `""` | Azure AD domain | | `onedrive_client_id` | string | `""` | Application (client) ID | | `onedrive_username` | string | `""` | Account email | | `onedrive_password` | string | `""` | Account password | | `onedrive_root_path` | string | `filebox_storage` | Storage root directory in OneDrive | | `onedrive_proxy` | int | `0` | Download through server proxy | ### Configuration Example ```bash file_storage=onedrive onedrive_domain=contoso.onmicrosoft.com onedrive_client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx onedrive_username=user@contoso.onmicrosoft.com onedrive_password=your_password onedrive_root_path=filebox_storage ``` ### Azure App Registration Steps To use OneDrive storage, you need to register an application in the Azure portal: #### 1. Get Domain Log in to [Azure Portal](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade), hover over your account in the top right corner, and the **Domain** shown in the popup is the `onedrive_domain` value. #### 2. Register Application 1. Click **+ New registration** in the top left 2. Enter application name (e.g., FileCodeBox) 3. **Supported account types**: Select "Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts" 4. **Redirect URI**: Select `Web`, enter `http://localhost` 5. Click **Register** #### 3. Get Client ID After registration, find the **Application (client) ID** in the **Essentials** section on the app overview page. This is the `onedrive_client_id` value. #### 4. Configure Authentication 1. Select **Authentication** in the left menu 2. Find **Allow public client flows**, select **Yes** 3. Click **Save** #### 5. Configure API Permissions 1. Select **API permissions** in the left menu 2. Click **+ Add a permission** 3. Select **Microsoft Graph** → **Delegated permissions** 4. Check the following permissions: - `openid` - `Files.Read` - `Files.Read.All` - `Files.ReadWrite` - `Files.ReadWrite.All` - `User.Read` 5. Click **Add permissions** 6. Click **Grant admin consent for xxx** 7. After confirmation, permission status should show **Granted** ### Install Dependencies Using OneDrive storage requires additional Python dependencies: ```bash pip install msal Office365-REST-Python-Client ``` ### Verify Configuration You can use the following code to test if the configuration is correct: ```python import msal from office365.graph_client import GraphClient domain = 'your_domain' client_id = 'your_client_id' username = 'your_username' password = 'your_password' def acquire_token_pwd(): authority_url = f'https://login.microsoftonline.com/{domain}' app = msal.PublicClientApplication( authority=authority_url, client_id=client_id ) result = app.acquire_token_by_username_password( username=username, password=password, scopes=['https://graph.microsoft.com/.default'] ) return result # Test connection client = GraphClient(acquire_token_pwd) me = client.me.get().execute_query() print(f"Login successful: {me.user_principal_name}") ``` ## WebDAV Storage WebDAV storage supports saving files to any service that supports the WebDAV protocol, such as Nextcloud, ownCloud, Nutstore, etc. ### Configuration Parameters | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `file_storage` | string | - | Set to `webdav` | | `webdav_url` | string | `""` | WebDAV server URL | | `webdav_username` | string | `""` | WebDAV username | | `webdav_password` | string | `""` | WebDAV password | | `webdav_root_path` | string | `filebox_storage` | Storage root directory in WebDAV | | `webdav_proxy` | int | `0` | Download through server proxy | ### Configuration Example ```bash file_storage=webdav webdav_url=https://dav.example.com/remote.php/dav/files/username/ webdav_username=your_username webdav_password=your_password webdav_root_path=filebox_storage ``` ### Nextcloud Configuration Example ```bash file_storage=webdav webdav_url=https://your-nextcloud.com/remote.php/dav/files/username/ webdav_username=your_username webdav_password=your_app_password webdav_root_path=FileCodeBox ``` ::: tip Nextcloud App Password It's recommended to create an app password in Nextcloud instead of using your main password: 1. Log in to Nextcloud 2. Go to **Settings** → **Security** 3. Create a new app password in **Devices & sessions** ::: ### Nutstore Configuration Example ```bash file_storage=webdav webdav_url=https://dav.jianguoyun.com/dav/ webdav_username=your_email@example.com webdav_password=your_app_password webdav_root_path=FileCodeBox ``` ::: tip Nutstore App Password Nutstore requires an app password: 1. Log in to Nutstore web version 2. Go to **Account Info** → **Security Options** 3. Add an app password ::: ## OpenDAL Storage OpenDAL is a unified data access layer that supports multiple storage services. Through OpenDAL, you can use Google Cloud Storage, Azure Blob Storage, and more. ### Configuration Parameters | Parameter | Type | Description | |-----------|------|-------------| | `file_storage` | string | Set to `opendal` | | `opendal_scheme` | string | Storage service type (e.g., `gcs`, `azblob`) | | `opendal__` | string | Service-specific configuration parameters | ### Install Dependencies ```bash pip install opendal ``` ### Google Cloud Storage Configuration Example ```bash file_storage=opendal opendal_scheme=gcs opendal_gcs_root=/filecodebox opendal_gcs_bucket=your-bucket-name opendal_gcs_credential=base64_encoded_credential ``` ### Azure Blob Storage Configuration Example ```bash file_storage=opendal opendal_scheme=azblob opendal_azblob_root=/filecodebox opendal_azblob_container=your-container opendal_azblob_account_name=your_account opendal_azblob_account_key=your_key ``` ### Supported Services OpenDAL supports numerous storage services. For the complete list, see the [OpenDAL Official Documentation](https://opendal.apache.org/docs/rust/opendal/services/index.html). Common services include: - `gcs` - Google Cloud Storage - `azblob` - Azure Blob Storage - `obs` - Huawei Cloud OBS - `oss` - Aliyun OSS (via OpenDAL) - `cos` - Tencent Cloud COS (via OpenDAL) - `hdfs` - Hadoop HDFS - `ftp` - FTP server - `sftp` - SFTP server ::: warning OpenDAL Notes 1. Services integrated via OpenDAL download through server proxy, consuming both storage service and server bandwidth 2. Compared to native S3/OneDrive support, OpenDAL may lack some debugging information 3. OpenDAL is written in Rust with good performance ::: ## Storage Selection Recommendations | Scenario | Recommended Storage | Reason | |----------|---------------------|--------| | Personal/Small deployment | Local storage | Simple and easy, no extra configuration needed | | Enterprise intranet | MinIO + S3 | Self-hosted object storage, data control | | Public cloud deployment | Corresponding cloud provider S3 | Fast same-region access, low cost | | Existing OneDrive | OneDrive | Utilize existing resources | | Existing WebDAV | WebDAV | Good compatibility | | Special storage needs | OpenDAL | Supports more storage services | ## Common Issues ### S3 Upload Failure 1. Check if Access Key and Secret Key are correct 2. Confirm bucket name and region configuration are correct 3. Check bucket access permission settings 4. Confirm signature version (`s3v2` or `s3v4`) matches service provider requirements ### OneDrive Authentication Failure 1. Confirm using a work/school account, not a personal account 2. Check if Azure app has been granted admin consent 3. Confirm API permissions are fully configured 4. Verify username and password are correct ### WebDAV Connection Failure 1. Check if WebDAV URL format is correct 2. Confirm username and password (or app password) are correct 3. Check if server supports WebDAV protocol 4. Confirm network connection is normal