С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 19.08.2012
Сообщений: 55

IdHTTP CGI WebServer загрузка файла с ПК пользователя на сервер

30.01.2015, 11:54. Показов 3094. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу проконсультировать.
Есть CGI Web Server по адресу https://193.158.98.65 (не точный)

Задача: Клиент, работая с Web Server, указывает файл со своего ПК и выполняет его загрузку на сервер, как пример - фотография в карточку клиента.

Для PageProducer я указываю в странице часть кода для указания файла для скачивания:
HTML5
1
<input type="file" id="upload">
Возникает вопрос: данный HTML держит в себе только имя файла, а совсем не полный путь к файлу.

В Web Server я прописал код:
C++
1
2
3
4
5
6
7
8
9
10
AnsiString qy=Request->ContentFields->Values["upload"]; // беру путь из HTML страницы
       TMemoryStream *result= new TMemoryStream();
       TStringStream *mail1 = new TStringStream();
       mail1->LoadFromFile(qy);
       IdHTTP1->Request->UserAgent="Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1";
       IdHTTP1->Connect();
       IdHTTP1->HandleRedirects=true;
       IdHTTP1->Post("http://193.158.98.65/DATA",mail1,result);
       result->SaveToFile("C:\\qwerty.jpg");
       IdHTTP1->Disconnect();
Не работает. Понимаю - перехимичил.
Прошу корректно подсказать - как выполнить данную процедуру.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2015, 11:54
Ответы с готовыми решениями:

Загрузка файла IdHTTP
Мне нужно загрузить файл на хостинг (картинок), но проблема в том, что я не знаю как это сделать. Поиском пользовался - не нашёл нужного...

загрузка файла с расширением .cgi
Здра-ви-я:) Только что скомпилировал следующий код(на C) #include &lt;stdio.h&gt; // Вкючаем поддержку функции ввода/вывода #include...

Perl + SSI = ошибка invalid CGI ref 'http://сервер/cgi-bin/view_bag.pl' in ....
Вопрос такой: Скрипт view_bag.pl без ошибок выполняется в папке /cgi-bin/, при этом атрибуты файла rwxr-xr-x. Но есть файл bag.shtml,...

12
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
30.01.2015, 12:34
Возникает вопрос: данный HTML держит в себе только имя файла, а совсем не полный путь к файлу.
Полный путь зачастую "хранится внутри", отображается лишь имя файла "как наиболее значимая часть" (это лишь мои домыслы).

Насчет проблемы с загрузкой:
1. Запускаешь программу по типу Http Analyzer (далее HA), он же "сниффер".
2. Загружаешь файл через браузер на требуемый адрес.
3. Анализируешь результаты, полученные от HA (что, куда и как передается).
4. Пишешь код, владея всей информацией.
P.S.: в UserAgent желательно указывать адекватные (современные версии браузера), иначе можно получить "отказ".
Загрузка на http и https имеет свои различия. В последнем случае с практической точки зрения больше сложности (оно и понятно).
P.P.S.: в 9-ой строке у тебя наклон слешей правильный?
0
0 / 0 / 1
Регистрация: 19.08.2012
Сообщений: 55
30.01.2015, 12:42  [ТС]
А кодом не поможете или маленьким проектом ? Признаюсь - лузер в данном вопросе - но данный вопрос - просто проблема ..... и помочь мало кто может по причине очень узкой ориентированности окружающих на CGI Web Server. Хотя вопрос очень элементарный.
Да, с 9-той строкой перемудрил, исправлю.
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
30.01.2015, 12:56
Лучший ответ Сообщение было отмечено Sergey R как решение

Решение

Ну хз, посмотри здесь: Ошибка при загрузке изображения (методом "Post") на radikal.cc
И я тоже не разбираюсь в тонкостях CGI Web Server (если честно, смутно представляю, что это такое).
Но на суть, надеюсь, данный момент сильно не повлияет.
1
0 / 0 / 1
Регистрация: 19.08.2012
Сообщений: 55
31.01.2015, 15:03  [ТС]
Выполнил по указанному Вами примеру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
AnsiString filess=Request->ContentFields->Values["upload"];   // Получаю имя файла НО НЕ ПУТЬ !!!
         TMemoryStream *result= new TMemoryStream();
         IdHTTP1->Request->UserAgent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36";
         TIdMultiPartFormDataStream *MPS = new TIdMultiPartFormDataStream;
         IdHTTP1->HandleRedirects = true;
         MPS->AddFile("Filedata", filess, "image/jpeg");  // для jpg
         MPS->AddFormField("submit", "Upload");
         MPS->AddFormField("Filename", filess);
         MPS->AddFormField("ISPUBLIC", "0");
         MPS->AddFormField("IDALBUM", "noall");
         MPS->AddFormField("RESPTYPE", "xml");
         MPS->AddFormField("FROMOBJECT", "22");
         MPS->AddFormField("MAXSIZEIMG", "1024");
         MPS->AddFormField("MAXSIZEIMGPREV", "180");
         MPS->AddFormField("ISINSCRIMGPREV", "1");
         MPS->AddFormField("INSCRIMGPREV", "Увеличить");
         MPS->AddFormField("COMMENTIMG", "");
         MPS->AddFormField("URLFORIMG", "");
         MPS->AddFormField("TAGS", "");
         IdHTTP1->Post("http://localhost//DATA//FILES//1",MPS, result);
         result->SaveToFile("C://WebServer//Win32//Debug//DATA//FILES//1//1.jpg");
         MPS->Free(); result->Free();
Выбираю простую картинку, на сервер загружает в файл код НТМЛ страницы ....

Посоветуете ?
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
31.01.2015, 18:14
Откуда я могу знать, какие параметры использовать?
Ты имеешь доступ к серверу (а я и любой другой нет), инструкции я предоставил.
И зачем берешь код загрузки на radikal? У тебя наверняка другие данные нужно передавать.
P.S.: к тому же у меня код старый (что-то может уже не работать), тот же AnsiString замени на String, вместо Free() нужно использовать delete.
И в примере (это именно пример, а не точное руководство к действию по методу "скопируй и вставь") для указания файла с компа используется полный путь, если ты не заметил. Лишь в качестве параметра при загрузке бралось "краткое имя".
Головой надо думать, а не ждать готовое решение.
Сервер должен "понимать", как загружать файл, то есть ему какой-то "обработчик" необходимо иметь.
0
0 / 0 / 1
Регистрация: 19.08.2012
Сообщений: 55
31.01.2015, 18:35  [ТС]
Благодарен за замечания.
Проблема не в доступе и параметрах.
Я как ВебСервер хочу загрузить с ПК пользователя картинку информацию о клиенте (фотографию лица) в точную папку.
ftp сервер (домашний ПК как сервер НЕ имеет ни каких паролей и логинов. Все открыто. Обыкновенный ПК с белым IP адресом и настроеным ftp доступом без паролей.

C++
1
2
3
4
5
6
7
8
9
10
11
12
String  filess="C://123.jpg"; // точный путь к файлу на ПК где-то работающего пользователя
         TMemoryStream *result= new TMemoryStream();
         IdHTTP1->HandleRedirects = true;
         IdHTTP1->Request->UserAgent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36";
                  IdHTTP1->Request->ContentType="image/jpeg";
         IdHTTP1->Request->ContentDisposition="form-data";
         TIdMultiPartFormDataStream *MPS = new TIdMultiPartFormDataStream;
         MPS->AddFile("1.jpg", filess, "image/jpeg");
 
         host="http://localhost"; // пробую работать с тестовым хостом, после укажу точный адрес внешнего IP адреса
         IdHTTP1->Post(host,MPS, result);
         result->SaveToFile("C://WebServer//Win32//Debug//DATA//FILES//1//111.jpg"); // точный путь куда записывать
Файл закачивает, но - это становиться НЕ картинка, а в нем оказывается текст страницы (НТМЛ код).
Настройки правильные, Post корректный.
Где запятая не правильно указана ?
Прошу помочь разобраться.
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
31.01.2015, 18:39
Не может ли проблема скрываться в строке (но точно не уверен, проверить не могу)
C++
1
IdHTTP1->Request->ContentDisposition="form-data";
?
0
0 / 0 / 1
Регистрация: 19.08.2012
Сообщений: 55
31.01.2015, 22:20  [ТС]
данный контент брал с описания HttP Analizer. Здесь концептуальный вопрос - можно ли вообще выполнить такую операцию. Начинаю смотреть в сторону FTP "Отправка файла на сервер" .... х.з. куда бежать думать ... Очень простая задача - разработчику ВЕБ сервера (WebBroker CGI) загрузить себе на сервер указанное пользователем фото с его же устройства ...... нонсонс .........

Добавлено через 1 час 55 минут
.... FTP "Отправка файла на сервер" в (WebBroker CGI) не может быть использована .... может кто подскажет все таки HTTP1->Post ???

Добавлено через 1 час 15 минут
В продолжение вопроса, простой пример. Сам себе хочу отправить файл методом HTTP->Post:
C++
1
2
3
4
5
6
String filess="C:\\Debug\\1.txt", fls="123.txt", host="http://localhost";
         TMemoryStream *result= new TMemoryStream();
         TMemoryStream *MPS= new TMemoryStream();
         MPS->LoadFromFile(filess);
         IdHTTP1->Post(host,MPS, result);
         result->SaveToFile("C://WebServer//FILES//1//"+fls);
Результат прежний, в конечном файле я вижу HTML текст страницы на которой инициирую выполнение данного кода. Что не правильно ?
0
0 / 0 / 1
Регистрация: 19.08.2012
Сообщений: 55
04.02.2015, 00:57  [ТС]
Прошу подсказать, каким образом сам себе могу отправить файл любого типа. Пример НЕ работающего кода:

C++
1
2
3
4
5
6
  String filess="C:\\Debug\\1.txt", fls="123.txt", host="http://localhost";
         TMemoryStream *result= new TMemoryStream();
         TMemoryStream *MPS= new TMemoryStream();
         MPS->LoadFromFile(filess);
         IdHTTP1->Post(host,MPS, result);
         result->SaveToFile("C://WebServer//FILES//1//"+fls);
В результате работы в файле 123.txt при любом файле оказывается текст НТМЛ страницы с которой выполнялась обработка данного.
Работающий данный пример необходим для ВЕБ сервера. т.е. клиент, серверного приложения. Файл будет браться у клиента и ложится на сервер с помощью серверной части.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.02.2015, 01:03
Блог: Компонент IdHTTP
0
0 / 0 / 1
Регистрация: 19.08.2012
Сообщений: 55
04.02.2015, 01:21  [ТС]
Прошу прощения, но изучил данное руководство и вдоль и в поперек. Вывод: НЕ помогло (пункт включительно: 8.1. POST-запрос c загрузкой файла на сайт.) Вот и уточняю на простом примере...
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.02.2015, 01:27
Цитата Сообщение от Sergey R Посмотреть сообщение
Вывод: НЕ помогло
Ну так это не пилюля от кривых рук.

Добавлено через 1 минуту
Цитата Сообщение от Sergey R Посмотреть сообщение
Вот и уточняю на простом примере...
Простого примера как бы не может быть, ибо все упирается в конкретный сайт, на разных сайтах запросы будут выглядеть по разному. (но естественно в рамках протокола)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2015, 01:27
Помогаю со студенческими работами здесь

IdHTTP и IdHTTP сервер: как отправить сообщение от сервера к клиенту?
Всем привет, отправляю файл по частям с клиента на сервер, и хочу получать обратное сообщение, что текущая часть файла дошла успешно....

WebServer выгрузка / загрузка файлов
Домашний Веб сервер по методологии CGI ISAPI - Web Server Application Задача: 1. При определенном действии, выгрузить файл (офис, тхт,...

Загрузка картинки на сервер для зарегистрированного пользователя
привет всем у меня такой вопрос как сделать чтобы зареганыйпользователь на моем сайте выбирал картинку на своем компе потом она...

загрузка файла на сервер с вашего сайта на чужой сервер под вашим логином!
Извените зараннее если ошибся разделом, не нашел куда можно отнести данную тему и посчитал как вариат написать в этот раздел, так вот: ...

Загрузка файлов на сервер в папку с номером группы пользователя
Доброго времени суток. Файлы через личный кабинет пользователя загружаются пока в папку upload. Как можно сделать, что бы если у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru