Как загрузить файл с удаленного сервера на удаленный сервер с помощью cURL?

У меня есть система, имеющая 2 отдельные платы под управлением Linux, подключенные друг к другу через IP. Основная плата подключена к Интернету, но другая/ведомая плата не может подключиться к Интернету. На ведомой плате работает FTP-сервер, доступный для основной платы.

На интернет-сервере / в облаке есть один файл для подчиненной платы, который я хочу загрузить непосредственно в хранилище подчиненной платы. Поэтому мне нужен механизм на основной плате, который будет загружать файл из Интернета и передавать/потоково передавать его непосредственно на FTP-сервер SlaveBoard по частям. Я не могу загрузить весь файл на основную плату и в конце перенести на подчиненную плату, так как на основной плате недостаточно места для хранения всего файла в локальном хранилище.

[Изменить] Главная доска будет выступать в качестве модератора.

Как добиться этого с помощью API-интерфейсов Curl в приложении C? Есть ли уже какой-либо механизм для достижения этого? Буду признателен за любую инициативу в этом. Заранее спасибо.


person Dixit    schedule 16.07.2020    source источник


Ответы (1)


Я бы использовал совместное использование NFS или RSYNC с подчиненной платы, где у меня есть хранилище.

Предпочитайте NFS, а не RSYNC, но в зависимости от вашего варианта использования, ресурсов и опыта.

  1. NFS-сервер. создать сервер NFS на подчиненной плате. смонтируйте этот общий ресурс на основной плате и загрузите в этот общий ресурс. эти загруженные файлы будут храниться на ведомой плате.

  2. RSYNC другой вариант установки rsync на обе машины

    rsync -rt rsync://[email protected]:873/files/ /home/pulledfromdaemon

после успешного копирования вы можете удалить файлы на основной плате.

не используйте флаг --delete, который удаляет файлы при удалении из источника.

person Devidas    schedule 16.07.2020
comment
Спасибо @Devidas. Я думаю, что RSYNC загрузит весь файл в локальное хранилище на основной плате, чего мы не можем сделать, так как у нас недостаточно места на основной плате. Пожалуйста, поправьте меня, если я ошибаюсь. - person Dixit; 16.07.2020
comment
Можем ли мы использовать механизм потоковой передачи на основной плате с помощью curl и ssl? Где файл будет загружаться и передаваться фрагментами непосредственно на ведомую плату. - person Dixit; 16.07.2020
comment
Что с НФС? - person Devidas; 16.07.2020
comment
Не удается настроить NFS из-за некоторых ограничений? Любым другим путем? - person Dixit; 16.07.2020
comment
вы правы насчет RSYNC. но вы можете удалить файлы после синхронизации. будет немного сложно, но выполнимо, поэтому я упомянул RSYNC. загрузить файл на основной, вы можете передать md5sum (или sha256sum) проверить md5sum на ведомом. когда синхронизация завершена, вы можете инициировать удаление на основной плате. - person Devidas; 16.07.2020
comment
Я это понял, но, как я уже сказал, мне понадобится столько свободного места на основной плате, где можно хранить весь файл. вы правы, мы можем удалить его, как только он будет синхронизирован. Но, во-первых, только у меня не так много свободного места, чтобы скачать файл. Если бы у меня было столько свободного места, я мог бы использовать другие методы передачи файлов (SCP, Curlupload) после завершения загрузки файла. - person Dixit; 16.07.2020
comment
ХОРОШО. NFS решит вашу проблему. Поскольку вы будете использовать память SLAVE. Используйте подчиненную машину в качестве сервера NFS. смонтируйте эту долю на основной плате. вы можете получить доступ к этим файлам из SLAVE. также ему не понадобится память на ГЛАВНОЙ машине. - person Devidas; 16.07.2020