【发布时间】:2016-07-21 20:56:28
【问题描述】:
我想通过 post 将图像上传到电报服务器,但我收到读取超时错误或 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;
抱歉英语不好。
【问题讨论】:
-
如果没有查看实际的 API 文档,很难回答这个问题。你能提供一个链接吗?我在您的代码中看到的唯一问题是您手动设置
Request.ContentType(Post()为您处理),并且您直接调用Request.SetHeaders()(不要那样做)。如果要记录TIdHTTP发送的内容,可以将TIdLog...组件附加到TIdHTTP,例如TIdLogEvent或TIdLogStream。 -
调用
Params.AddFile()时,需要使用'photo'而不是'File1'作为字段名。 -
雷米勒博非常感谢你。我的问题解决了。
标签: indy