Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Upload with Indy

Posted on 2006-07-19
5
Medium Priority
?
590 Views
Last Modified: 2010-04-05
I need the code to upload with Indy. If possible I want to upload a TStringList without saving it in a temp file ?

Thanks
0
Comment
Question by:crystyan
  • 4
5 Comments
 
LVL 17

Expert Comment

by:TheRealLoki
ID: 17143018
upload to where? TCP Client to TCP Server?
or to a Web server?

- tcp client side indy 9 -

TCPClient1.WriteInteger(mystringlist.count); // send the # of lines to teh server
for i := 0 to pred(mystringlist.count) do // loop through each line and send them 1 at a time
begin
    TCPClient1.WriteLn(mystringlist[i]); // send 1 line
end;

- tcp server side indy 9 -

var
    i: integer;
    newstringlist: tstringlist;
begin
    newstringlist := tstringlist.create;
    try
        numlines := AThread.Connection.ReadInteger;
        for i := 1 to numlines do
            newstringlist.Add(AThread.Connection.ReadLn);

// do something with the stringlist now

    finally
        newstringlist.free;
    end;



- tcp client side indy 10.0.52 -

TCPClient1.IOHandler.WriteInteger(mystringlist.count); // send the # of lines to teh server
for i := 0 to pred(mystringlist.count) do // loop through each line and send them 1 at a time
begin
    TCPClient1.IOHandler.WriteLn(mystringlist[i]); // send 1 line
end;

- tcp server side indy 10.0.52 -

var
    i: integer;
    newstringlist: tstringlist;
begin
    newstringlist := tstringlist.create;
    try
        numlines := AContext.Connection.IOHandler.ReadInteger;
        for i := 1 to numlines do
            newstringlist.Add(AContext.Connection.IOHandler.ReadLn);

// do something with the stringlist now

    finally
        newstringlist.free;
    end;
0
 

Author Comment

by:crystyan
ID: 17143023
on a webserver.
0
 
LVL 17

Expert Comment

by:TheRealLoki
ID: 17143248
The Indy 9 chat demo is very buggy
firstly, the client can lock up on the
Msg := IdTCPClient1.ReadLn('', 5);
line in the Timer1Timer() event

This can be resolved by putting a TIdAntiFreeze on the form, but you still get a memory leak
(just watch the task maanger while your client is connected)
To resolve this you need to disable the TTimer while doing the ReadLn, so your Timer1Timer routine ends up looking something like this :-

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Com,
  Msg : String;
begin
  if not IdTcpClient1.Connected then
    exit;
  Timer1.Enabled := False;
  try
    Msg := IdTCPClient1.ReadLn('', 5);

    if Msg <> '' then
      if Msg[1] <> '@' then
        begin
        { Not a system command }
          memLines.Lines.Add(Msg);
        end
      else
        begin
        { System command }
          Com := UpperCase(Trim(Copy(Msg, 2, Pos(':', Msg) -2)));
          Msg := UpperCase(Trim(Copy(Msg, Pos(':', Msg) +1, Length(Msg))));
          if Com = 'CLIENTS' then
            lbClients.Items.CommaText := Msg;
        end;
    finally
      Timer1.Enabled := True;
    end;
  end;

anyway, this may be the cause of your problems...
0
 
LVL 17

Expert Comment

by:TheRealLoki
ID: 17143272
OOPS, sorry, ignore the above post, it was meant for another question ... my bad :-(
0
 
LVL 17

Accepted Solution

by:
TheRealLoki earned 1000 total points
ID: 17143305
use a TStringStream, and upload it as a stream
I thi nk it's something like :-
  var
    MyStream: TStringStream;
  begin
    MyStream := TStringStream.Create(Memo1.Lines.Text);
    try
      idhttp1.Put('http://www.someserver.com', MyStream)
    finally
      MyStream.Free;
    end;
  end;
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
This Micro Tutorial will teach you how to add a cinematic look to any film or video out there. There are very few simple steps that you will follow to do so. This will be demonstrated using Adobe Premiere Pro CS6.
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question