downloadTarget method

  1. @override
Future<DownloadTarget> downloadTarget(
  1. String id, {
  2. Duration expiresIn = const Duration(minutes: 15),
})
override

Where a client should fetch the asset with id from.

Returns a RedirectDownload when the holding provider can issue a time-limited URL, and a StreamedDownload when it cannot.

Implementation

@override
Future<DownloadTarget> downloadTarget(
  String id, {
  Duration expiresIn = const Duration(minutes: 15),
}) async {
  final response = await _call(StoreProtocol.assetDownloadTarget, {
    'id': id,
    'expiresIn': expiresIn.inSeconds,
  });
  if (Json.optString(response, 'kind') == 'redirect') {
    return RedirectDownload(
      url: Uri.parse(Json.requireString(response, 'url')),
      expiresAt: Json.requireTimestamp(response, 'expiresAt'),
      providerId: Json.requireString(response, 'providerId'),
    );
  }
  return StreamedDownload(
    providerId: Json.optString(response, 'providerId') ?? this.id,
    reason: Json.optString(response, 'reason') ?? 'node cannot presign',
  );
}