![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте дорогие форумчане , столкнулся с проблемой закачки нужных мне файлов конфигураций на веб сервер для резервного копирования .
Код програмы примерно следующий : Код:
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
|
|||
|
|||
|
а у тебя из браузера аплоадится файл нормально?
|
|
#3
|
|||
|
|||
|
Нормально вроде бы, всё в ручном режиме фалы льются на сервер , почему программно на делфе реализовать не могу , хз наверно в коде ошибка где то =(
|
|
#4
|
|||
|
|||
|
ааааапппп ======> =(
|
|
#5
|
||||
|
||||
|
абсолютно рабочий код:
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.idmultipartformdatastream.AddFile('sfile', 'c:\Downloads\background2.bmp', 'application/octet-stream'); Последний раз редактировалось NumLock, 24.06.2010 в 09:26. |
|
#6
|
||||
|
||||
|
Я кажется знаю в чем проблема.
Скрипты скачивать нельзя. Если б можно было их качать то небыло бы не одного не взломаного сайта в интернете, так как было бы известны пароли и логины от баз данных а это очень плохо. Когда мы загружаем в браузере ПХП страницу, то сервер выполняет ПХП скрипт и выдает нам згенерированый ХТМЛ код. Если ты пишешь код взаимодействия со своим сервером то вот мой вариант решения такой задачи. Пишем скрипт с возможностью обрабтки входных параметров(POST или GET). результат получаем в виде ХТМЛ кода. Например :'All systems work'. При надобности парсим ответ. Если тебе нужно скачать файл со скриптом со своего сервера который потдерживает FTP то для этого у инди есть спец. компонент. |
|
#7
|
|||
|
|||
|
Цитата:
Просто мне нужно именно не аплоадер чужой чейто заливать файлы а именно на свой сервер где я вот накатал жалкое подобие скрипта в две строчки который бы копировал файлы.Прежде чем браться переделывать расматривать на переделку твой скрипт, это со всеми типами фалов работает , или только картинки грузит ??? Я не совсем понимаю принцип работы связки просто , какие мне нужно передать кроме этих параметров ещё параметры скрипту??? =( Ещё не разу не работал с этим компонентом , и спецификации ограничиваются только синтаксисом , не каких объяснение нету что к чему. Последний раз редактировалось winner13, 25.06.2010 в 23:57. |
|
#8
|
|||
|
|||
|
Что мне нужно передать скрипту , чтобы он скопировал или закачал на сервер с клиентского компьютера на котором и будет моя программа передавать файл, которы будет копировать или закачивать сервер при таком скрипте ============>
Код:
<?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
|
|||
|
|||
|
Так как я по спецификации компонента писал код , эт конечно может глупо но вставил мне непонятную строчку 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
|
||||
|
||||
|
Код:
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
|
|||
|
|||
|
Сейчас попробую посмотрим что получится, тока сейчас вернулся к работе своей из командировки . О результатах сообщу чуть позже кому интересно будет +)
|