A Strapi provider to upload files to a FTP server with connection concurrency limitation.
npm install strapi-provider-ftp-uploadbash
npm install strapi-provider-ftp-upload
`
Visit the npm page.
$3
#### Provider
`typescript
// config/plugins.js or config/plugins.ts
module.exports = ({ env }) => ({
upload: {
config: {
provider: "strapi-provider-ftp-upload",
providerOptions: {
host: env("FTP_HOST"),
port: env("FTP_PORT", 21),
user: env("FTP_USER"),
password: env("FTP_PASSWORD"),
secure: env.bool("FTP_SECURE", false),
path: env("FTP_BASE_PATH"),
baseUrl: env("FTP_BASE_URL"),
connectionConcurrency: env("FTP_CONNECTION_CONCURRENCY", 5), // 👈 Optional. Default to 5
useSentry: true, // 👈 Optional. Default to false
},
},
},
});
`
#### Security Middleware
`typescript
// config/middleware.js or config/middleware.ts
module.exports = ({ env }) => [
// ...
{
name: 'strapi::security',
config: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
'connect-src': ["'self'", 'https:'],
'img-src': [
"'self'",
'data:',
'blob:',
env('FTP_BASE_URL'), // 👈 new line
],
'media-src': [
"'self'",
'data:',
'blob:',
env('FTP_BASE_URL'), // 👈 new line
],
upgradeInsecureRequests: null,
},
},
},
},
// ...
];
`
#### Environment Variables
`bash
.env
FTP_HOST=cloud-provider.example.com
FTP_PORT=21
FTP_USER=your-ftp-username
FTP_PASSWORD=your-ftp-password
FTP_BASE_URL=https://ftp.mysite.com/uploads/
FTP_BASE_PATH=/uploads/
FTP_SECURE=true # 👈 Optional
FTP_CONNECTION_CONCURRENCY=5 # 👈 Optional
``