문제

내 문제는 URL에서 이미지를 로드하는 방법에 관해 제가 질문한 다른 질문이 있습니다..아래 코드는 작동합니다.그러나 이미지를 얻으려고하면 문제가 발생했지만 (거기에 있다고 가정) 분명히 제거되었습니다.응용 프로그램은 오류를 모르고 반환합니다.들어오는 오류를 캡처하여 이를 방지할 수 있는 방법이 있습니까?어떤 제안이라도 주시면 감사하겠습니다.그의 라인에서 발생합니다.

 IdHTTP1.get('http://www.google.com/intl/en_ALL/images/logo.gif',MS);

고마워요, 크리스

uses
  GIFImg;

 procedure TForm1.btn1Click(Sender: TObject);
 var
   MS : TMemoryStream;
   GIf: TGIFImage;
 begin
     MS := TMemoryStream.Create;
    GIf := TGIFImage.Create;
   try
    IdHTTP1.get('http://www.google.com/intl/en_ALL/images/logo.gif',MS);
    Ms.Seek(0,soFromBeginning);       
   Gif.LoadFromStream(MS);
   img1.Picture.Assign(GIF);

  finally
   FreeAndNil(GIF);
   FreeAndNil(MS);
  end;
end;
도움이 되었습니까?

해결책

예외를 어떻게 캡처합니까?같은 방식으로 다른 예외를 캡처합니다.사용 try-except 차단하다.

procedure TForm1.btn1Click(Sender: TObject);
var
  MS : TMemoryStream;
  Gif: TGIFImage;
begin
  MS := TMemoryStream.Create;
  try
    Gif := TGIFImage.Create;
    try
      try
        IdHTTP1.Get('http://www.google.com/intl/en_ALL/images/logo.gif', MS);
      except
        on e: EIdHTTPProtocolException do begin
          if e.ErrorCode = 404 then begin
            // not found
            exit;
          end else begin
            // some other reason for failure
            raise;
          end;
        end;
      end;
      MS.Position := 0;
      Gif.LoadFromStream(MS);
      img1.Picture.Assign(Gif);
    finally
      Gif.Free;
    end;
  finally
    MS.Free;
  end;
end;

Indy가 허용할 수 없는 응답을 받으면 다음 유형의 예외가 발생합니다. EIdHTTPProtocolException.가능한 실패 이유마다 다른 예외 클래스를 발생시키지 않으므로 다음을 확인하세요. ErrorCode 숫자 응답에 대한 속성입니다.다음을 참조하세요. HTTP 사양 다양한 응답 코드의 의미에 대해 알아보세요.

Indy는 다음을 통해 특정 응답 코드를 무시하도록 구성할 수 있는 것 같습니다. AIgnoreReplies 주장 TIdCustomHTTP.DoRequest 그러나 저는 오늘 제가 원하는 만큼 해당 매개변수를 추적했습니다. 따라서 이에 대한 추가 정보를 원할 경우 새로운 질문을 하거나 누군가 이 답변을 편집하여 이 단락을 더 완전한 것으로 바꿀 수 있습니다.

위의 예에서는 404(찾을 수 없음)를 확인하고 종료했습니다.사용하지 않도록 하세요 MS 만약에 Get 내용이 불확실하고 유효한 GIF 이미지가 아닐 수 있으므로 예외가 발생합니다.다른 서버 응답의 경우 호출자가 대신 처리할 수 있도록 예외를 다시 발생시킵니다.아마도 그것을 바꾸고 싶을 것입니다.다음의 자손이 아닌 모든 예외 EIdHTTPProtocolException 자동으로 다시 인상됩니다.해결 방법을 모르는 오류에 대한 예외를 포착하지 마세요.

다른 팁

모든 시도에는 a가 있습니다 잡다
예외를 대할 곳이 있습니다.
아마도 텍스트가 포함 된 빈 이미지를 만들었을 것입니다. 이미지를 사용할 수 없습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top