createContent method
Creates a new mxc://
URI, independently of the content being uploaded. The content must be provided later
via PUT /_matrix/media/v3/upload/{serverName}/{mediaId}
.
The server may optionally enforce a maximum age for unused IDs,
and delete media IDs when the client doesn't start the upload in time,
or when the upload was interrupted and not resumed in time. The server
should include the maximum POSIX millisecond timestamp to complete the
upload in the unused_expires_at
field in the response JSON. The
recommended default expiration is 24 hours which should be enough time
to accommodate users on poor connection who find a better connection to
complete the upload.
As well as limiting the rate of requests to create mxc://
URIs, the server
should limit the number of concurrent pending media uploads a given
user can have. A pending media upload is a created mxc://
URI where (a)
the media has not yet been uploaded, and (b) has not yet expired (the
unused_expires_at
timestamp has not yet passed). In both cases, the
server should respond with an HTTP 429 error with an errcode of
M_LIMIT_EXCEEDED
.
Implementation
Future<CreateContentResponse> createContent() async {
final requestUri = Uri(path: '_matrix/media/v1/create');
final request = Request('POST', baseUri!.resolveUri(requestUri));
request.headers['authorization'] = 'Bearer ${bearerToken!}';
final response = await httpClient.send(request);
final responseBody = await response.stream.toBytes();
if (response.statusCode != 200) unexpectedResponse(response, responseBody);
final responseString = utf8.decode(responseBody);
final json = jsonDecode(responseString);
return CreateContentResponse.fromJson(json as Map<String, Object?>);
}