Я хочу загрузить изображение на сервер телеграммы с сообщением, но я получаю ошибку тайм-аута чтения или 415 неподдерживаемых типов носителей.Загрузить изображение С idhttp indy9 delphi7
телеграмма говорит: « фото отправить Вы можете либо передать file_id как строковые переслать фотографию, которая уже на серверах Телеграммы, или загрузить новую фотографию, используя многослойные/form-данные ..»
что не так?
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;
извините за плохой английский.
Трудно ответить на это, не видя фактической документации API. Можете ли вы предоставить ссылку? Единственные проблемы, которые я вижу в вашем коде, это то, что вы вручную устанавливаете 'Request.ContentType' (' Post() 'обрабатывает это для вас), и вы вызываете' Request.SetHeaders() 'непосредственно (не делайте этого) , Если вы хотите зарегистрировать то, что отправляет 'TIdHTTP', вы можете добавить компонент' TIdLog ... 'в' TIdHTTP', например 'TIdLogEvent' или' TIdLogStream'. –
привет. эта ссылка: https://core.telegram.org/bots/api#sendphoto –
При вызове 'Params.AddFile()' вам нужно использовать '' photo'' вместо ''File1'' в качестве имени поля. –