fromUrl method

Future<String> fromUrl(
  1. String url, {
  2. Duration checkInterval = const Duration(seconds: 1),
  3. bool? storeMode,
  4. ProgressListener? onProgress,
})

Make upload to /fromUrl endpoint

Implementation

Future<String> fromUrl(
  String url, {
  Duration checkInterval = const Duration(seconds: 1),
  bool? storeMode,
  ProgressListener? onProgress,
}) async {
  final request = createMultipartRequest(
    'POST',
    buildUri('$uploadUrl/from_url/'),
    false,
  )..fields.addAll({
      'pub_key': publicKey,
      'store': resolveStoreModeParam(storeMode),
      'source_url': url,
      if (options.useSignedUploads) ..._signUpload(),
    });

  final token =
      (await resolveStreamedResponse(request.send()))['token'] as String;

  await for (UrlUploadStatusEntity response
      in _urlUploadStatusAsStream(token, checkInterval)) {
    if (response.status == UrlUploadStatusValue.Error) {
      throw ClientException(response.errorMessage);
    }

    if (response.status == UrlUploadStatusValue.Success) {
      return response.fileInfo!.id;
    }

    if (response.progress != null && onProgress != null) {
      onProgress(response.progress!);
    }
  }

  throw ClientException('Unsupported response received');
}