Installation Type *
VPS
Vito Version *
3.16.0
Describe the Bug *
Database backups to Dropbox storage provider upload empty/placeholder files (10 bytes) instead of the actual backup ZIP files. The backup ZIP is created correctly on the server (~80KB), but the Dropbox API receives the literal string {{ $src }} (10 bytes) instead of the file contents.
Root Cause: In resources/views/ssh/storage/dropbox/upload.blade.php, the @ symbol before {{ $src }} in the --data-binary flag is interpreted by Blade as an escape directive, which prevents the variable from being rendered.
blade# Current code (broken):
--data-binary '@{{ $src }}'
Fixed code:
--data-binary '{{ "@" . $src }}'
Blade interprets @{{ $src }} as "output the literal text {{ $src }}" instead of rendering the variable. By moving the @ inside the Blade expression and concatenating it with $src, the template correctly renders to @/path/to/backup.zip.
Steps to Reproduce *
- Install Vito Deploy 3.16 on a VPS (Ubuntu 24.04)
- Install PostgreSQL and create a database
- Connect a Dropbox storage provider with a valid API token
- Create a database backup targeting Dropbox
- Run the backup
- Check the uploaded file on Dropbox — it will be 10 bytes instead of the actual backup size (~80KB)
Expected Behavior *
Backup ZIP file (~80KB+) should be uploaded to Dropbox with the correct file contents.
Logs *
Upload log (storage/app/server-logs/*-upload-to-dropbox.log):
{"name": "namira-20260422030604.zip", "path_lower": "/namira/namira-20260422030604.zip", "size": 10, "content_hash": "443c22832cbf836141d9216a42fd64e1aeb1cb5f0dcd87eaf1a91863d7afd2ad"}
Key evidence:
- "size": 10 — Dropbox received only 10 bytes
- The content_hash is identical across all broken uploads, confirming the same placeholder text {{ $src }} is sent every time
- Backup file on server: 81KB (correct)
- Same file uploaded via manual curl: 80KB (correct)
- File uploaded by Vito: 10 bytes (broken)
Screenshots
No response
Additional Context
Environment:
- Vito version: 3.16
- OS: Ubuntu 24.04
- PHP: 8.4.15
- Database: PostgreSQL
- Storage Provider: Dropbox
Affected File:
resources/views/ssh/storage/dropbox/upload.blade.php
Suggested Fix:
curl -sb --location --request POST 'https://content.dropboxapi.com/2/files/upload' \ --header 'Accept: application/json' \ --header 'Dropbox-API-Arg: {"path":"{{ $dest }}"}' \ --header 'Content-Type: application/octet-stream' \ --header 'Authorization: Bearer {{ $token }}' \ ---data-binary '@{{ $src }}' +--data-binary '{{ "@" . $src }}'
Workaround:
sudo -u vito sed -i "s|--data-binary '@{{ \$src }}'|--data-binary '{{ \"@\" . \$src }}'|" /home/vito/vito/resources/views/ssh/storage/dropbox/upload.blade.php php artisan view:clear
Note: This bug was found on version 3.16. It has not been verified whether it persists on the latest version (3.21.2). No release notes between 3.16 and 3.21.2 mention a Dropbox upload fix, so the issue may still be present.
Installation Type *
VPS
Vito Version *
3.16.0
Describe the Bug *
Database backups to Dropbox storage provider upload empty/placeholder files (10 bytes) instead of the actual backup ZIP files. The backup ZIP is created correctly on the server (~80KB), but the Dropbox API receives the literal string {{ $src }} (10 bytes) instead of the file contents.
Root Cause: In resources/views/ssh/storage/dropbox/upload.blade.php, the @ symbol before {{ $src }} in the --data-binary flag is interpreted by Blade as an escape directive, which prevents the variable from being rendered.
blade# Current code (broken):
--data-binary '@{{ $src }}'
Fixed code:
--data-binary '{{ "@" . $src }}'
Blade interprets @{{ $src }} as "output the literal text {{ $src }}" instead of rendering the variable. By moving the @ inside the Blade expression and concatenating it with $src, the template correctly renders to @/path/to/backup.zip.
Steps to Reproduce *
Expected Behavior *
Backup ZIP file (~80KB+) should be uploaded to Dropbox with the correct file contents.
Logs *
Upload log (storage/app/server-logs/*-upload-to-dropbox.log):
{"name": "namira-20260422030604.zip", "path_lower": "/namira/namira-20260422030604.zip", "size": 10, "content_hash": "443c22832cbf836141d9216a42fd64e1aeb1cb5f0dcd87eaf1a91863d7afd2ad"}Key evidence:
Screenshots
No response
Additional Context
Environment:
Affected File:
resources/views/ssh/storage/dropbox/upload.blade.phpSuggested Fix:
curl -sb --location --request POST 'https://content.dropboxapi.com/2/files/upload' \ --header 'Accept: application/json' \ --header 'Dropbox-API-Arg: {"path":"{{ $dest }}"}' \ --header 'Content-Type: application/octet-stream' \ --header 'Authorization: Bearer {{ $token }}' \ ---data-binary '@{{ $src }}' +--data-binary '{{ "@" . $src }}'Workaround:
sudo -u vito sed -i "s|--data-binary '@{{ \$src }}'|--data-binary '{{ \"@\" . \$src }}'|" /home/vito/vito/resources/views/ssh/storage/dropbox/upload.blade.php php artisan view:clearNote: This bug was found on version 3.16. It has not been verified whether it persists on the latest version (3.21.2). No release notes between 3.16 and 3.21.2 mention a Dropbox upload fix, so the issue may still be present.