อัปโหลดภาพด้วย 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
Remy Lebeau ขอบคุณมาก. ปัญหาของฉันได้รับการแก้ไขแล้ว   -  person Mehdi jafari    schedule 21.07.2016


คำตอบ (1)


person    schedule
comment
Remy Lebeau ขอบคุณมาก. ปัญหาของฉันได้รับการแก้ไขแล้ว - person Mehdi jafari; 24.07.2016