Поэтому мне нужно развернуть облачную функцию Google, которая позволит мне сделать 2 вещи.
Первая - это ЗАГРУЗИТЬ любые файлы на SFTP / FTP-сервере в локальный каталог / tmp облачной функции.Затем, второй шаг, это ЗАГРУЗИТЬ этот файл в корзину в облачном хранилище Google.
На самом деле я знаю, как загрузить, но я не понимаю, как ЗАГРУЗИТЬ файлы с сервера ftp на мой локальный / tmpdirectory.
Итак, на самом деле я написал GCF, который получает параметры (на теле), конфигурацию (config), чтобы позволить мне подключаться на FTP-сервере, имя файла и путь.
Для моего теста я использовал следующий тест ftp-сервера: https://www.sftp.net/public-online-sftp-servers с этой конфигурацией.
{
config:
{
hostname: 'test.rebex.net',
username: 'demo',
port: 22,
password: 'password'
},
filename: 'FtpDownloader.png',
path: '/pub/example'
}
После моей ЗАГРУЗКИ я запускаю свою ЗАГРУЗКУ.Для этого я проверяю, нашел ли я файл ЗАГРУЗИТЬ в «/ tmp / filename», прежде чем ЗАГРУЗИТЬ, но файл здесь ненадежный.
См. Следующий код:
exports.transferSFTP = (req, res) =>
{
let body = req.body;
if(body.config)
{
if(body.filename)
{
//DOWNLOAD
const Client = require('ssh2-sftp-client');
const fs = require('fs');
const client = new Client();
let remotePath
if(body.path)
remotePath = body.path + "/" + body.filename;
else
remotePath = "/" + body.filename;
let dst = fs.createWriteStream('/tmp/' + body.filename);
client.connect(body.config)
.then(() => {
console.log("Client is connected !");
return client.get(remotePath, dst);
})
.catch(err =>
{
res.status(500);
res.send(err.message);
})
.finally(() => client.end());
//UPLOAD
const {Storage} = require('@google-cloud/storage');
const storage = new Storage({projectId: 'my-project-id'});
const bucket = storage.bucket('my-bucket-name');
const file = bucket.file(body.filename);
fs.stat('/tmp/' + body.filename,(err, stats) =>
{
if(stats.isDirectory())
{
fs.createReadStream('/tmp/' + body.filename)
.pipe(file.createWriteStream())
.on('error', (err) => console.error(err))
.on('finish', () => console.log('The file upload is completed !!!'));
console.log("File exist in tmp directory");
res.status(200).send('Successfully executed !!!')
}
else
{
console.log("File is not on the tmp Google directory");
res.status(500).send('File is not loaded in tmp Google directory')
}
});
}
else res.status(500).send('Error: no filename on the body (filename)');
}
else res.status(500).send('Error: no configuration elements on the body (config)');
}
Итак, яполучено следующее сообщение: «Файл не загружен в каталог tmp Google», поскольку после метода fs.stat () stats.isDirectory () имеет значение false.Прежде чем я использую метод fs.stats (), чтобы проверить, находится ли файл здесь, я только что написал файлы с теми же именами файлов, но без содержимого.Итак, я делаю вывод, что мою работу по загрузке, но без файлов DONWLOAD, действительно сложно скопировать в облачное хранилище Google.
Спасибо за ваше время и надеюсь, что найду решение.