Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как из Delphi закачать файл на сайт (принимает PHP)

25K
19 февраля 2007 года
qqqqqq
2 / / 22.01.2007
По Delphi полный чайник и с сокетами на РНР не работал (просто задач не было).
Из названия понятна проблема - прога на Delphi должна через инет передать хосту файл (бинарник).
Если кто сталкивался, дайте пожалуйста, куски кода на Delphi и РНР. Задача, чтобы файл был принят РНР в переменную или записан (это уже дальше понятно). У меня Delphi BDS 2006.
21K
19 февраля 2007 года
Logos
16 / / 02.02.2007
Сам такое не делал, но подозреваю что может понадобиться в будущем.
У меня есть общие мысли:
надо с помощью дельфи смоделировать работу браузера, т.е. отправить некий браузерный запрос на сервер, в котором методом POST передется этот самый файл. URL должен быть адресован тому PHP скрипту, который и будет подцеплять файл и играться с ним.
Значит тебе нужно:
1) Посмотреть структуру запросов, отсылаемых браузером. Говрят что там ничего сложного нет. Заголовки, потом переменные. Если бинарник, то надо тип контекста указать наверное ещё...
2) Смоделировать такую же структуру (интерфейс) с передачей файла.
И дело в шляпе, старина.
ЗЫ. Если получится, напиши как решил эту задачу.
ЗЫ.
А ещё можно так извратиться.
Открыть в браузере страницу с стандартной формой для отправки файла.
Написать скрипт на VBS, который будет автоматом нажимать кнопку и вставлять файл, и отправлять его.
Этот скрипт запускать из Дельфи.
Ну чем не решение? :)
9.0K
19 февраля 2007 года
Toxin_F
93 / / 03.01.2007
Посмотри здесь
25K
19 февраля 2007 года
qqqqqq
2 / / 22.01.2007
Господа, всем спасибо. Разобрался. Через компонент idhttp. Файл идет как от обычной формы методом POST. Если кому нужен алгоритм (в сети такие вопросы возникали):

Delphi:

unit Unit2;

interface

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

type
TForm2 = class(TForm)
IdHTTP1: TIdHTTP;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Memo1: TMemo;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}




procedure TForm2.Button2Click(Sender: TObject);
var FileName: string;response: string;
var formData: TIdMultiPartFormDataStream;
begin
FileName := 'c:\pic.gif';
formData := TIdMultiPartFormDataStream.Create;
formData.AddFile('File',fileName,'application/octet-stream');
formData.AddFormField('param1', 'value1');
//HttpObject.Port := Port;
response := idHTTP1.Post('http://myhost/ppost.php',formData);
Label1.Caption:= response ;
Memo1.Lines.Text:= response ;
end;

end.


PHP

<?

copy($File,"!!!.gif")

?>

те. как прием с обічной формы
27K
14 марта 2007 года
yuri000
1 / / 14.03.2007
qqqqqq, спасибо что разобрался и людям рассказал.
Я давно уже работаю с компонентом TIdHTTP, а вот про IdMultipartFormData не знал (его нет на палитре визуальных). А тут потребовалось передавать файлы на сайт!
По ходу дела скажу, что IdMultipartFormData при отправке формы прибавляет к ПОСЛЕДНЕМУ полю ещё два кода - "перевод строки/возврат каретки". Таким образом, длина поля увеличивается на два байта. В системах, жестко, контролирующих длину передаваемых данных это может приводить к постоянной ошибке. Для устранения проблемки мне пришлось просто добавить в конец ещё одно "холостое" поле, т.е. так:
...
formData.AddFormField('param1', 'value1');
formData.AddFormField('param2', 'value2');
formData.AddFormField('param3', 'value3');
formData.AddFormField('EmptyField', '');
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог