Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.06.2010, 18:00
winner13 winner13 вне форума
Прохожий
 
Регистрация: 23.06.2010
Сообщения: 10
Репутация: 10
По умолчанию IdHTTP настолько туп что не могу понять как использовать

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

Код програмы примерно следующий :

Код:
begin
   sleep(5);
   FileName := 'C:/****Setup.log';
   formData := TIdMultiPartFormDataStream.Create;
   formData.AddFile('file',fileName,'application/octet-stream');
   formData.AddFormField('param1', 'value1');
   response := idHTTP1.Post('http://локалхост/winlog.php',formData);
end;

код скрипта куда обращается программа вот такой :

Код:
<?
copy($HTTP_POST_FILES['file'],"*****Setup.log")
?>
Пробывал ещё вот так
<?
copy($File,"*****Setup.log")
?>


Подскажите кто может в чём ошибка? Почему у меня фаил с машины на сервер не копируется???


Заранее благодарен.
Ответить с цитированием
  #2  
Старый 23.06.2010, 19:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а у тебя из браузера аплоадится файл нормально?
Ответить с цитированием
  #3  
Старый 23.06.2010, 20:38
winner13 winner13 вне форума
Прохожий
 
Регистрация: 23.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Нормально вроде бы, всё в ручном режиме фалы льются на сервер , почему программно на делфе реализовать не могу , хз наверно в коде ошибка где то =(
__________________
не решаемых проблем нет, есть не приятные для нас решения.
Ответить с цитированием
  #4  
Старый 24.06.2010, 03:10
winner13 winner13 вне форума
Прохожий
 
Регистрация: 23.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

ааааапппп ======> =(
__________________
не решаемых проблем нет, есть не приятные для нас решения.
Ответить с цитированием
  #5  
Старый 24.06.2010, 09:23
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

абсолютно рабочий код:
http://data.cod.ru/61532
Код:
unit Unit1;

interface

uses
  IdMultipartFormData,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses IdHeaderList;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  idmultipartformdatastream: TIdMultiPartFormDataStream;
begin
  IdHTTP1.Get('http://data.cod.ru');
  idmultipartformdatastream:=TIdMultiPartFormDataStream.Create;
  idmultipartformdatastream.AddFormField('action', 'file_upload');
  idmultipartformdatastream.AddFormField('password', '');
  idmultipartformdatastream.AddFormField('description', 'testing');
  idmultipartformdatastream.AddFormField('agree', '1');
  idmultipartformdatastream.AddFile('sfile', 'c:\Downloads\background2.bmp', 'application/octet-stream');
  try
    IdHTTP1.Post('http://data.cod.ru/cabinet/upload/', idmultipartformdatastream);
  except
    if IdHTTP1.ResponseCode div 100<>3 then raise;
    Edit1.Text:='http://data.cod.ru'+IdHTTP1.Response.RawHeaders.Values['LOCATION'];
  end;
end;

end.
только я изменил TIdMultiPartFormDataStream. добавил в него еще один параметр. так что тебе нужно будет написать (в самом исходнике):
idmultipartformdatastream.AddFile('sfile', 'c:\Downloads\background2.bmp', 'application/octet-stream');

Последний раз редактировалось NumLock, 24.06.2010 в 09:26.
Ответить с цитированием
  #6  
Старый 24.06.2010, 17:57
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Я кажется знаю в чем проблема.

Скрипты скачивать нельзя. Если б можно было их качать то небыло бы не одного не взломаного сайта в интернете, так как было бы известны пароли и логины от баз данных а это очень плохо. Когда мы загружаем в браузере ПХП страницу, то сервер выполняет ПХП скрипт и выдает нам згенерированый ХТМЛ код.

Если ты пишешь код взаимодействия со своим сервером то вот мой вариант решения такой задачи. Пишем скрипт с возможностью обрабтки входных параметров(POST или GET). результат получаем в виде ХТМЛ кода. Например :'All systems work'. При надобности парсим ответ.

Если тебе нужно скачать файл со скриптом со своего сервера который потдерживает FTP то для этого у инди есть спец. компонент.
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
  #7  
Старый 25.06.2010, 23:52
winner13 winner13 вне форума
Прохожий
 
Регистрация: 23.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
абсолютно рабочий код:
http://data.cod.ru/61532
Код:
unit Unit1;

interface

uses
  IdMultipartFormData,

..............................
только я изменил TIdMultiPartFormDataStream. добавил в него еще один параметр. так что тебе нужно будет написать (в самом исходнике):
idmultipartformdatastream.AddFile('sfile', 'c:\Downloads\background2.bmp', 'application/octet-stream');

Просто мне нужно именно не аплоадер чужой чейто заливать файлы а именно на свой сервер где я вот накатал жалкое подобие скрипта в две строчки который бы копировал файлы.Прежде чем браться переделывать расматривать на переделку твой скрипт, это со всеми типами фалов работает , или только картинки грузит ??? Я не совсем понимаю принцип работы связки просто , какие мне нужно передать кроме этих параметров ещё параметры скрипту??? =( Ещё не разу не работал с этим компонентом , и спецификации ограничиваются только синтаксисом , не каких объяснение нету что к чему.
__________________
не решаемых проблем нет, есть не приятные для нас решения.

Последний раз редактировалось winner13, 25.06.2010 в 23:57.
Ответить с цитированием
  #8  
Старый 26.06.2010, 00:27
winner13 winner13 вне форума
Прохожий
 
Регистрация: 23.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Что мне нужно передать скрипту , чтобы он скопировал или закачал на сервер с клиентского компьютера на котором и будет моя программа передавать файл, которы будет копировать или закачивать сервер при таком скрипте ============>
Код:
<?php
$uploaddir = '/uploads/logs_rezerv/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . 
	$_FILES['userfile']['name']));
?>
СКРИПТ С БРАУЗЕРА СТО ПРОЦЕНТОВ РАБОТАЕТ

Нужно чтобы при запуске программы , она сделал запрос на этот скрипт и передала ему логи ...

Просто Я сам программирую на пхп больше , чем на делфи , по этому не могу понять принцип работы компонента IdHTTP, кто может помогите доделать , заодно понять принцип работы .

Вот что я сделал в делфи :

Код:
begin
   sleep(5);
   FileName := 'C:/****Setup.log';
   formData := TIdMultiPartFormDataStream.Create;
   formData.AddFile('userfile',fileName,'multipart/form-data');
   formData.AddFormField('submit', 'Send File');
   response := idHTTP1.Post('http://локалхост/winlog.php',formData);
end;

НЕ РАБОТАЕТ ЗАРАЗА =((
__________________
не решаемых проблем нет, есть не приятные для нас решения.

Последний раз редактировалось winner13, 26.06.2010 в 04:37.
Ответить с цитированием
  #9  
Старый 26.06.2010, 04:40
winner13 winner13 вне форума
Прохожий
 
Регистрация: 23.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Так как я по спецификации компонента писал код , эт конечно может глупо но вставил мне непонятную строчку formData.AddFormField('submit', 'Send File');

Честно не знаю что она делает . Просто подогнал её...


Вот кстати .html форма откуда из браузера сто процентов получается грузить фалы на сервер
Код:
<form enctype="multipart/form-data" action="/winlog.php" method="post">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>


Хотел программно просто сделать, вторые сутки не сплю ...
__________________
не решаемых проблем нет, есть не приятные для нас решения.

Последний раз редактировалось winner13, 26.06.2010 в 05:03.
Ответить с цитированием
  #10  
Старый 26.06.2010, 19:40
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
  idmultipartformdatastream:=TIdMultiPartFormDataStream.Create;
  idmultipartformdatastream.AddFormField('submit', 'Send File');
  idmultipartformdatastream.AddFile('userfile', 'c:\КАКОЙ-ТО_ФАЙЛ', 'application/octet-stream');
  IdHTTP1.Post('http://ТВОЙ_СЕРВЕР/winlog.php', idmultipartformdatastream);

принцип работы прост
имеется форма:
<form method="post" action="/cabinet/upload/"
это куда постим:
IdHTTP1.Post('http://ТВОЙ_СЕРВЕР/cabinet/upload/', idmultipartformdatastream);
в форме поле файла:
<input name="sfile" type="file"
это добавляем файл:
idmultipartformdatastream.AddFile('sfile', 'c:\КАКОЙ-ТО_ФАЙЛ', 'application/octet-stream');
application/octet-stream - да все-равно какой файл будет, чтобы не думать о mime
не забываем про скрытые поля:
<input type="hidden" name="action" value="file_upload">
если они конечно есть:
idmultipartformdatastream.AddFormField('action', 'file_upload');
так же могут быть другие элементы: кнопки, как у тебя:
<input type="submit" value="Send File">
idmultipartformdatastream.AddFormField('submit', 'Send File');
чекбоксы, картинки (вместо кнопки отправить например). но это тебе уже не надо)

Последний раз редактировалось NumLock, 26.06.2010 в 19:58.
Ответить с цитированием
  #11  
Старый 09.07.2010, 23:03
winner13 winner13 вне форума
Прохожий
 
Регистрация: 23.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Сейчас попробую посмотрим что получится, тока сейчас вернулся к работе своей из командировки . О результатах сообщу чуть позже кому интересно будет +)
__________________
не решаемых проблем нет, есть не приятные для нас решения.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:02.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025