strapi-upload-sftp
v1.0.0
Published
Optimized SFTP upload provider for Strapi v5
Maintainers
Readme
strapi-upload-sftp
An optimized, production-ready SFTP Upload Provider for Strapi v5.
Features
- 🚀 High Performance: Connection pooling & client reuse to minimize SSH connection overhead.
- 🔑 Multiple Auth Methods: Supports
password, SSHprivateKey(string or Buffer), passphrase, and SSH agent. - 📁 Auto Directory Creation: Automatically creates remote nested subdirectories recursively before uploading files.
- 🛡️ POSIX Path Safe: Prevents path traversal vulnerabilities and double-slash URL malformations.
- ⚡ Stream & Buffer Support: Fully compatible with Strapi v5 upload streams and buffer payloads.
- 🟦 TypeScript Native: Shipped with full TypeScript type definitions (
.d.ts).
Installation
npm install strapi-upload-sftp
# or
yarn add strapi-upload-sftpConfiguration
In your Strapi project's config/plugins.ts or config/plugins.js:
TypeScript (config/plugins.ts)
export default ({ env }) => ({
// ...
upload: {
config: {
provider: 'strapi-upload-sftp',
providerOptions: {
host: env('SFTP_HOST'),
port: env.int('SFTP_PORT', 22),
username: env('SFTP_USERNAME'),
password: env('SFTP_PASSWORD'), // Optional if using privateKey
privateKey: env('SFTP_PRIVATE_KEY'), // Optional: SSH Private Key string or Buffer
passphrase: env('SFTP_PASSPHRASE'), // Optional: Passphrase for encrypted private key
remotePath: env('SFTP_REMOTE_PATH', '/var/www/uploads'),
baseUrl: env('SFTP_BASE_URL', 'https://cdn.example.com/uploads'),
readyTimeout: env.int('SFTP_TIMEOUT', 20000), // Optional: timeout in ms (default: 20000)
retries: env.int('SFTP_RETRIES', 2), // Optional: reconnect retries (default: 2)
},
},
},
});Environment Variables (.env)
SFTP_HOST=sftp.example.com
SFTP_PORT=22
SFTP_USERNAME=deploy
SFTP_PASSWORD=secret
SFTP_REMOTE_PATH=/var/www/uploads
SFTP_BASE_URL=https://cdn.example.com/uploadsLicense
MIT © Habib Bouzidi
