Pascal Scripting: DownloadTemporaryFile

Прототип

function DownloadTemporaryFile(const Url, FileName, RequiredSHA256OfFile: String; const OnDownloadProgress: TOnDownloadProgress): Int64;

Описание

Выполняет загрузку файла по указанному URL-адресу во временный каталог. Для определения расположения временного каталога используйте ExpandConstant('{tmp}').

Если указано значение параметра RequiredSHA256OfFile, будет выполнено его сравнение с хеш-суммой SHA-256 загруженного файла и вызвано исключение, если они не совпадают.

В случае ошибки будет вызвано исключение. Иначе функция вернёт размер загруженных данных. Если указано значение параметра RequiredSHA256OfFile и файл уже был загружен, функция вернёт значение 0.

Поддерживается протокол HTTPS (но без просроченных или самоподписанных сертификатов), а также HTTP. Перенаправления выполняются автоматически и применяются автоматические настройки прокси. Безопасно использовать для различных сервисов.

Для обычной аутентификации используйте SetDownloadCredentials.

Для параметра OnDownloadProgress укажите функцию, которая будет передавать информацию о ходе загрузки, или значение nil, если в этом нет необходимости.

Комментарии

Класс TOnDownloadProgress представлен следующей функцией:

TOnDownloadProgress = function(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean;

Параметр ProgressMax будет равен 0, если размер файла по-прежнему неизвестен. Функция возвращает значение True, которое позволяет продолжить загрузку, иначе — False.

Пример

[Code]
function OnDownloadProgress(const Url, Filename: String; const Progress, ProgressMax: Int64): Boolean;   
begin
  if ProgressMax <> 0 then
    Log(Format('  %d из %d байт.', [Progress, ProgressMax]))
  else
    Log(Format('  %d байт.', [Progress]));
  Result := True;
end;

function InitializeSetup: Boolean;
begin
  try
    DownloadTemporaryFile('https://jrsoftware.org/download.php/is.exe?dontcount=1',
                          'innosetup-latest.exe',
                          '',
                          @OnDownloadProgress);
    DownloadTemporaryFile('https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1',
                          'ISCrypt.dll',
                          '2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc',
                          @OnDownloadProgress);
    Result := True;
  except
    Log(GetExceptionMessage);
    Result := False;
  end;
end;

Также смотрите в файле CodeDownloadFiles.iss другой пример с использованием CreateDownloadPage.

См. также:

SetDownloadCredentials
DownloadTemporaryFileSize
DownloadTemporaryFileDate
CreateDownloadPage
ExtractTemporaryFile