Загрузить изображение с idhttp indy9 delphi7

я хочу загрузить изображение на сервер телеграммы с сообщением, но я получаю сообщение об ошибке тайм-аута чтения или 415 неподдерживаемый тип носителя.

телеграмма говорит: «Фотография для отправки. Вы можете либо передать file_id как строку, чтобы повторно отправить фотографию, которая уже находится на серверах 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
Реми Лебо, большое спасибо. моя проблема решена.   -  person Mehdi jafari    schedule 21.07.2016


Ответы (1)


person    schedule
comment
Реми Лебо, большое спасибо. моя проблема решена. - person Mehdi jafari; 24.07.2016