Delphi 文件下载IDHTTP实现

function TbsFileBackUpForm.DownloadFile(
  aurl: string): string;
var
  MemoryStream: TMemoryStream;
  URL, SavePath, sFileName,sFileType: string;
  SaveDialog: TSaveDialog;
  iPos: Integer;
  DMHttp: TIdHTTP;
//  SSLIO: TIdSSLIOHandlerSocketOpenSSL;
begin
  Result := '';
  if aurl = '' then Exit;
  URL := '';
  SavePath := '';
  sFileName := '';
  sFileType := '';
  iPos := 0;
  MemoryStream := TMemoryStream.Create;
  SaveDialog := TSaveDialog.Create(nil);
  DMHttp := TIdHttp.Create(nil);
//  DMHttp.ProtocolVersion := pv1_1;
//  DMHttp.HandleRedirects := True;
//  SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
//  SSLIO.SSLOptions.Method:=sslvTLSv1;
//  SSLIO.SSLOptions.Mode := sslmClient ;
  try
    URL :=aurl;
    Screen.Cursor := crHourGlass;
    try
      DMHttp.Get(URL, MemoryStream);
      MemoryStream.Position := 0;
    except
      raise Exception.Create('下载文件失败');
    end;
    sFileName := DMHttp.Response.RawHeaders.Values['Content-Disposition'];
    Delete(sFileName, 1, Pos('filename=', sFileName) + Length('filename=') - 1);
    SaveDialog.FileName := sFileName; //文件名
    sFileType := sFileName;
    iPos := Pos('.', sFileType);
    if iPos = 0 then
      iPos := Length(sFileType) + 1;
//    Delete(sFileType, 1, Length(LeftBStr(sFileType, iPos - 1)) + 1);
    SaveDialog.Filter := sFileType; //类型
    if SaveDialog.Execute then
      SavePath := SaveDialog.FileName
    else
      Exit;
    MemoryStream.SaveToFile(SavePath);
    Result := SavePath;
  finally
    FreeAndNil(MemoryStream);
    FreeAndNil(SaveDialog);
    FreeAndNil(DMHttp);
    Screen.Cursor := crDefault;
  end;
  ShowMessage('文件下载成功');
end;

猜你喜欢

转载自blog.csdn.net/weixin_39428938/article/details/80988495
今日推荐