To get the filename from a URL, you can retrieve the HEAD information and check Content Disposition header field. For this task, you can use the TIdHTTP indy component. If the Content Disposition does not have the file name, you can try parsing the URL.
uses IdURI, IdHttp, SysUtils; function GetRemoteFileName (const URI: string) : string; var LHttp: TIdHTTP; begin LHttp := TIdHTTP.Create(nil); try LHttp.Head(URI); Result:= LHTTP.Response.RawHeaders.Params['Content-Disposition', 'filename']; if Result = '' then with TIdURI.Create(URI) do try Result := Document; finally Free; end; finally LHttp.Free; end; end;