Search code examples
indy

Upload Image With idhttp indy9 delphi7


i want to upload image to telegram server with post but i get read timeout error or 415 unsupported media type.

telegram says: " Photo to send. You can either pass a file_id as String to resend a photo that is already on the Telegram servers, or upload a new photo using multipart/form-data. "

what is wrong?

var
IDUser : String;
Stream: TStringStream;
Params: TIdMultipartFormDataStream;
msg : WideString;
LHandler: TIdSSLIOHandlerSocket;
Src , boundry : string;
begin
  API := edtAPI.Text;
  IDUser := Edit1.Text;
  Stream := TStringStream.Create('');
  try
    Params := TIdMultipartFormDataStream.Create;
    try
      //Params.AddFile('File1', 'C:\test.txt','image/png');
      Params.AddFormField('chat_id',IDUser);
      Params.AddFile('File1', 'E:\image.png','image/png');
      //Data.CopyFrom(Params,0);
      //Params.AddFormField(' test',',');
      try
        msg := '/sendPhoto';
        LHandler := TIdSSLIOHandlerSocket.Create(nil);
        //IdHTTP1.Request.ContentType := 'multipart/form-data';
        IdHTTP1.ReadTimeout := 30000;
        IdHTTP1.IOHandler:=LHandler;
        LHandler.SSLOptions.Method := sslvTLSv1;
        LHandler.SSLOptions.Mode := sslmUnassigned;
        IdHTTP1.HandleRedirects := true;
        IdHTTP1.Request.ContentType := 'multipart/form-data';

        idhttp1.Request.SetHeaders;
        memoResponse.Text :=idhttp1.Request.RawHeaders.Text;
        memoRequest.Text := BaseUrl + API + msg;
        IdHTTP1.Post(BaseUrl + API + msg, Params,Stream);
      except
        on E: Exception do
          showmessage('Error encountered during POST: ' + E.Message+ ': '
          + intToStr(IdHTTP1.Response.ResponseCode))
      end;
      ShowMessage(Stream.DataString);
    finally
      Params.Free;
    end;
  finally
    Stream.Free;
  end;

sorry for poor english.


Solution

  • var
      Stream: TStringStream;
      Params: TIdMultipartFormDataStream;
      msg : WideString;
      LHandler: TIdSSLIOHandlerSocket;
      IDUser : string;
    begin
      API := edtAPI.Text;
      IDUser := Edit1.Text;
      msg := '/sendPhoto';
      Stream := TStringStream.Create('');
      try
        Params := TIdMultipartFormDataStream.Create;
        try
          Params.AddFile('photo', 'E:\image.jpg','');
          Params.AddFormField('chat_id',IDUser);
          Params.AddFormField('caption',UTF8Encode('ÇÑÓÇá ÊÕæíÑ åã ÏÑÓÊ ÔÏ'));
          try
            LHandler := TIdSSLIOHandlerSocket.Create(nil);
            //IdHTTP1.ReadTimeout := 300000;
            IdHTTP1.IOHandler:=LHandler;
            LHandler.SSLOptions.Method := sslvTLSv1;
            LHandler.SSLOptions.Mode := sslmUnassigned;
            IdHTTP1.HandleRedirects := true;
            //idhttp1.Request.ContentType := Params.RequestContentType;
            memoRequest.Text := BaseUrl + API + msg;
            IdHTTP1.Post(BaseUrl + API + msg, Params, Stream);
          except
          on E: Exception do
            ShowMessage('Error encountered during POST: ' + E.Message);
          end;
          memoResponse.Text := Stream.DataString;
        finally
          Params.Free;
        end;
      finally
        Stream.Free;
      end;
    end;