Завантажте зображення за допомогою idhttp indy9 delphi7

Я хочу завантажити зображення на сервер Telegram разом із повідомленням, але я отримую помилку часу очікування читання або 415 непідтримуваний тип носія.

telegram каже: «Фото для надсилання. Ви можете або передати 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