1const fs = require('fs');
2const Apify = require('apify');
3const FtpClient = require('ftp-client');
4
5const connect = (ftpClient) => new Promise((resolve, reject) => {
6 ftpClient.connect((err) => {
7 if(err){reject(err);}
8 else{resolve();}
9 });
10});
11
12const upload = (ftpClient, files, outFolder) => new Promise((resolve) => {
13 ftpClient.upload(files, outFolder || '/', {
14 baseDir: outFolder || '/',
15 overwrite: 'older'
16 }, function (result) {
17 resolve(result);
18 });
19});
20
21Apify.main(async () => {
22 const input = await Apify.getInput();
23 if(!input.host){throw new Error('Missing "host" attribute in INPUT!');}
24 if(!input.username){throw new Error('Missing "username" attribute in INPUT!');}
25 if(!input.password){throw new Error('Missing "password" attribute in INPUT!');}
26 if(!input.fileUrls){throw new Error('Missing "fileUrls" attribute in INPUT!');}
27
28 const config = {
29 host: input.host,
30 port: input.port || 21,
31 user: input.username,
32 password: input.password
33 };
34
35 const options = {
36 overwrite: 'older',
37 logging: 'basic'
38 };
39
40 const client = new FtpClient(config, options);
41 await connect(client);
42
43 const fileNames = [];
44 for(const url of input.fileUrls){
45 const response = await Apify.utils.requestAsBrowser({url});
46 const data = response.rawBody;
47 if(data){
48 const fileName = url.slice(url.lastIndexOf('/') + 1);
49 fs.writeFileSync(fileName, data);
50 fileNames.push(fileName)
51 }
52 }
53 await upload(client, fileNames, input.folder);
54});