Как закачать файл на сервер по средаствам С++

Статус
В этой теме нельзя размещать новые ответы.

qwerty

Постоялец
Регистрация
10 Апр 2006
Сообщения
75
Реакции
1
Доброго дня али вечера!
Вопрос дня сегодня следующий.Возможно ли и если возможно то как:)Буду благодарен примеру с кодом.Решение интересует именно на языке С++.
Есть три моих сервера.На сервере 1 стоит форма загрузки файлов на сервер,что то похожее на подобие рапидшаре и любых других обменников. И на сервере 2, располагается файл.
С сервера 3 хочу загрузить файл с сервера 2 на сервер 1.
Самый простой вариант это качаем файл на сервер 3 после того как файл скачался загружаем его на сервер 1.Теперь знатоки внимание вопрос.Можно ли не ждать пока файл загрузится полностью можно ли скачали часть данных скажем в память или еще как и передать серверу для загрузки.и так далее пока порциями не загрузим весь файл полностью.Тоесть отдавать его сразу частями и не сохранять на жеский диск сервера?
 
Вы не указали, что за сервера и на каких ОС. Веб сервера на всех трех или вы имеете ввиду просто некие хосты?

Смею предположить, что на всех трех стоят вебсервера и они под ОС Unix. Я бы попробовал сделать следующее:

1. на сервере 2, где лежит файл для закачки, кладем программульку (cgi скрипт, написанный на С++ c использованием, например, libcurl библиотеки под c++). Он умеет делать следующее: запускаться кем-то извне через HTTP GET запрос с сервера 3 и закачивать указанный файл POSTом на сервер 1.

2. На сервере 3 пишется небольшой скрипт (тоже, кстати, cgi и тоже на c++), который дергает скрипт (см пункт 1), лежащий на сервере 2 через тот же libcurl.

Произойдет следующее:

С любого места можно будет набрать в браузере

Для просмотра ссылки Войди или Зарегистрируйся

который пошлет http запрос вида

GET /startuploadtoserver1?f=myfile.pdf HTTP/1.1

на хост server2, порт 80

В свою очередь на server2 в скрипте startuploadtoserver1
выполнится запрос

POST /uploader HTTP/1.1
...
Content-Type: xxxxx
Content-Length: xxxxx

...данные файла pdf....

В ответ от server1 к server2 придет 200 OK, типа все OK + какая-нибудь полезная инфа или веб-страничка с результатом. Проанализировав страничку (или код ответа) скрипт сервера 2 дает ответ для server 3 примерно в таком же ключе. Это уже детали. Ну а архитектуру решения в принципе я расписал.

Допустим файл огромный, канал между server 2 и server 1. В этом случае скрипт на server 2 отвалится через Timeout веб-сервера (или скрипт на server 3 отвалится по Timeout). Тогда решение другое.
Два скрипта на server 2 (script1 загружает файл в фоновом режиме, script2 отдает статус загрузки по запросу с server3) и один на server 3 (инициатор начала загрузки и монитор статуса).

На сервере 2 script1 загрузки должен запускаться по cron регулярно и проверять, не надо ли ему загрузить какой-нибудь файл на сервер 1. Если у него появляется такое задание, он его делает (обычный демон или cgi скрипт написанный на c++ с libcurl) и складывает результат закачки куда-нибудь (туда же откуда и получает задание на закачку и имя файла - например из БД). А скрипт на server 3 сам себя рефрешит до тех пор, пока не получит от скрипта script 2 c сервера 2 ответ о закачке или неудаче.

В общем словами тяжело конечно архитектуру расписывать. Но варианты есть. Вообще до конца задача не ясна, поэтому если дадите более детальные комментарии может все проще намного окажется. Например, сделать перекачку файла через два ftp сервера (server2 и server1) и одного ftp клиента (на сервере 3).
 
Как считаете какой язык лучше выбрать?стоит ли это все реализовывать на php или все таки сделать это по средствам сги написанных на си?

Добавлено через 2 минуты
Как считаете стоит ли для этого дела использовать пхп?я тоже склоняюсь к си и сги но на пхп это будет реализовать проще и кода меньше, но будет ли это работать лучше вот в чем вопрос?
 
предположу что ето все попытка создания собственного обменника по типу депозита или рапиды... asp.net
 
Так уж получилось, что для веба лучше приспособлен Perl/PHP (особенно это касается Unix хостингов). А C/C++ как-то вообще для написания веб-приложений не годится. Я не говорю, что нельзя писать, пожалуйста, можно, как CGI можно хоть на Unix-шелле писать. Но удобнее все-таки заколачивать гвозди молотком, а не дрелью.

ASP.NET - да, тоже хороший выбор, но больше для тех случаев, когда речь идет о формах, работе с базой данных и Windows хостинге.
 
Почему "Самый простой вариант это качаем файл на сервер 3 после того как файл скачался загружаем его на сервер 1" ? Не проще перелить с 2 на 1 напрямую? Почему не подходят более-менее готовые решения - например установить на 1 фтп сервак, на 2 - пхпшный скрипт который запускает командную строку с фтп клиентом, а на 3 - управляющий скрипт дергающий скрипт 2?
ЗЫ. Если это никсовые сервера, то грамотный админ сможет примаунтить директорию с одного сервака на второй. Тогда не нужен даже фтп. Скрипт 2 будет тупо запускать команду копирования через exec(). Мне кажется это дешевле обойдется чем написание С++ программы с нуля дл я переброски файлов между никсами. Чето мне так кажется что в никсах уже давно такие вещи сделаны.
 
только не используете ftp
лучше через ssh, sftp - а то ваши логины и пароли могу заснифить.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху