getContent method

  1. @deprecated
Future<FileResponse> getContent(
  1. String serverName,
  2. String mediaId, {
  3. bool? allowRemote,
  4. int? timeoutMs,
  5. bool? allowRedirect,
})

{{% boxes/note %}} Replaced by GET /_matrix/client/v1/media/download/{serverName}/{mediaId} (requires authentication). {{% /boxes/note %}}

{{% boxes/warning %}} {{< changed-in v="1.11" >}} This endpoint MAY return 404 M_NOT_FOUND for media which exists, but is after the server froze unauthenticated media access. See Client Behaviour for more information. {{% /boxes/warning %}}

serverName The server name from the mxc:// URI (the authority component).

mediaId The media ID from the mxc:// URI (the path component).

allowRemote Indicates to the server that it should not attempt to fetch the media if it is deemed remote. This is to prevent routing loops where the server contacts itself.

Defaults to true if not provided.

timeoutMs The maximum number of milliseconds that the client is willing to wait to start receiving data, in the case that the content has not yet been uploaded. The default value is 20000 (20 seconds). The content repository SHOULD impose a maximum value for this parameter. The content repository MAY respond before the timeout.

allowRedirect Indicates to the server that it may return a 307 or 308 redirect response that points at the relevant media content. When not explicitly set to true the server must return the media content itself.

Implementation

@deprecated
Future<FileResponse> getContent(
  String serverName,
  String mediaId, {
  bool? allowRemote,
  int? timeoutMs,
  bool? allowRedirect,
}) async {
  final requestUri = Uri(
    path:
        '_matrix/media/v3/download/${Uri.encodeComponent(serverName)}/${Uri.encodeComponent(mediaId)}',
    queryParameters: {
      if (allowRemote != null) 'allow_remote': allowRemote.toString(),
      if (timeoutMs != null) 'timeout_ms': timeoutMs.toString(),
      if (allowRedirect != null) 'allow_redirect': allowRedirect.toString(),
    },
  );
  final request = Request('GET', baseUri!.resolveUri(requestUri));
  final response = await httpClient.send(request);
  final responseBody = await response.stream.toBytes();
  if (response.statusCode != 200) unexpectedResponse(response, responseBody);
  return FileResponse(
    contentType: response.headers['content-type'],
    data: responseBody,
  );
}