Delphi-приложение изпраща данни към сървъра по пощата (Инди)

Когато развитието на следващото уеб-проекта стоеше задачата - за реализиране на клиентския софтуер на Delphi, което ще предава данни към сървъра, използвайки метода на POST. Заявлението трябва да предават на текст и качване на файлове на уеб-сървър.

Изпълнението на такива данни се изпращат на сървъра, като използва езика на уеб развитие (например, PHP) е доста проста, но ако трябва да напише молба, много потребители на софтуер, а след това там е малко по-трудно да се установи връзка със сървъра. директен метод за свързване към базата данни и FTP сървъра, от Делфи - защото там не е това не е безопасно, не е надежден (сменят паролите, връзки за данни, и т.н.) и създава допълнително. проблеми със съвместимостта от страна на клиента. За да реши проблема, реших да пиша на езика на PHP скриптове (сървър част), които ще обработват входящите заявки POST и да се върнат в резултат обратно на клиента (прилагане на Delphi). Предимствата на този подход е, че всички връзки и обработка на данни се извършва на сървъра, той е много по-безопасно да ръководи "Connect".

Като се започне "на Google" е дадено много откъслечна информация, те са най-вече форуми, но това е на всички парчета. Един да се определи точно какво да бъде използван Инди, а именно IdHTTP компонент осъществява по пощата. В действителност всичко е просто, този метод отнема два параметъра на URL ресурси и DataStream (поточни данни), в отговор на резултата дава под формата на текст (тъй като това може да бъде HTML код на страницата). По принцип тя се състои в правилния формирането на DataStream (прехвърлят поточни данни), но в хода се изкачи още по-нататъшни капани, а именно руски кодиране (било то не се оправи). Това беше тогава, и да започнете да се забавляват в продължение на няколко часа от скитащи в огромната мрежа. Като цяло, достатъчно бърборене, нека да преминем към практиката и прилагането на софтуера.

По този начин, програмата е прост. Тя трябва да изпрати данните към сървъра на метода на POST, данни съдържа "Заглавие" (низ), "Описание" (многоредов текст) и графичен файл (JPG, PNG, GIF-бинарни данни). Сървърът трябва да приема данните, до процес, за да запишете файл с изображение на сървъра и да върне отговор. В отговор възстанови Delphi приложение, един и същ текст с добавянето на етикети и линк към качения файл. Нищо повече.

Сценарият, който искате да запишете с име «indypost1.php».

Забележка. Когато запазите (чрез преносим компютър), което трябва да се уточни кодиране «UTF-8", в противен случай няма да има проблеми с показването на кирилица!

На следващо място, отворен Delphi, нанесете следващия ни оформление на формуляра:

Следните компоненти се използват в оформлението: (. 2 броя) Label, Бутон (2 бр.), Edit (. 2 броя), Бележка квадратчето, OpenDialog, IdHTTP. Посочете имената на следните компоненти ( "Име" собственост):

IdHTTP1 CheckBox1 и отпуск без да се променя (уморен.)))).

За да се избегне случайно "редактиране" по пътя към Edit (imgfile) и го изложи ReadOnly собственост на True. Просто трябва imgfile chkfile и задайте Enabled имота невярно. Ние активирате използването им в квадратчето т.е. Ние предлагаме възможност за избор - за да изтеглите образа или не.

За OpenDialog (PictDialog) трябва да се постави филтър (филтър собственост), както следва:

Delphi-приложение изпраща данни към сървъра по пощата (Инди)

Всъщност визуално обучение е приключила! Как да стигнем до кодиране!

В проекта ще генерираме потока от данни, като се използва тип дойде с Indy - TidMultiPartFormDataStream. Въпреки, че в цяла внедрявания на TStream, но работи с TidMultiPartFormDataStream - лесно е!

За този тип е станал достъпен за нашия проект, то е необходимо да се добавят следните употреби на библиотеки: IdMultipartFormData.

За да създадете CheckBox1 OnClick събитие (с двойно кликване върху проекта) и го монтирате в случай следния код:

Тук ние активирате imgfileichkfile предмети, подлежащи на проверка наличността марка (ако има отметка, обектите да станат активни).

Сега организира избора на изображения. За да направите това, създайте събитие OnClick на chkfile бутон (просто кликнете два пъти върху обекта) и списък на следното:

Това събитие ще доведе до прозореца на изображението и ако потребителят кликне върху "Open", след това по пътя на файла ще бъде добавен към imgfile.

И тук стигаме до финалната бутона "POST". Създаване OnClick събитие за бутона, и добавете следния код:

Датапост - обект тип TIdMultiPartFormDataStream. заявка POST позволява да се образува структура, съставена от полета от различни типове.

данни в «съдържанието» подобно предаване.

се формира Всички данни, е необходимо да ги прехвърлят към скрипта на сървъра и да получите отговор:

защото TMemo разбира слоган почивка "
"Ние използваме функцията" StringReplace ", за да го замени на ясни символи за нов ред" # 13 # 10 "

След приключване на всички изчистите паметта на обект Датапост линия:

Въпреки, че в този пример, това ще се случи автоматично в края на процедурата, но всички ...

Реалните резултати от работната програма на екрана:

По този начин, ние можем да изпратим до сървъра колкото файлове с данни, обработка на данни на сървъра и да каже отговора на приложението, в резултат на изпълнението на скрипта. Тя може дори да бъде просто 0 или 1, който ще сигнализира за прилагане за следваща реакция.

All. Успех на всички. Надявам се, че информацията е била полезна и ще намери приложение за него.

Готов пример и скрипт, можете да изтеглите от тук.

Пълният код на модула:

Моля, обърнете внимание, промени в подготовката на данните, които се изпращат и получават отговорите, и то се извършва транскодиране от UTF8