Качете изображение с idhttp indy9 delphi7

искам да кача изображение на сървъра на telegram с публикация, но получавам грешка при изчакване при четене или 415 неподдържан тип медия.

telegram казва: " Снимка за изпращане. Можете или да подадете file_id като String, за да изпратите отново снимка, която вече е на сървърите на Telegram, или да качите нова снимка, като използвате multipart/form-data. "

Какво не е наред?

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;

съжалявам за лошия английски.


person Mehdi jafari    schedule 19.07.2016    source източник
comment
Трудно е да се отговори на този въпрос, без да се види действителната документация на API. Можете ли да предоставите връзка? Единственият проблем, който виждам във вашия код, е, че задавате Request.ContentType ръчно (Post() се справя с това вместо вас) и вие извиквате Request.SetHeaders() директно (не правете това). Ако искате да регистрирате това, което TIdHTTP изпраща, можете да прикачите TIdLog... компонент към TIdHTTP, като TIdLogEvent или TIdLogStream.   -  person Remy Lebeau    schedule 19.07.2016
comment
здрасти тази връзка: core.telegram.org/bots/api#sendphoto   -  person Mehdi jafari    schedule 20.07.2016
comment
Когато извиквате Params.AddFile(), трябва да използвате 'photo' вместо 'File1' като име на полето.   -  person Remy Lebeau    schedule 20.07.2016
comment
Remy Lebeau много ви благодаря. проблемът ми е решен.   -  person Mehdi jafari    schedule 21.07.2016


Отговори (1)


person    schedule
comment
Remy Lebeau много ви благодаря. проблемът ми е решен. - person Mehdi jafari; 24.07.2016