upload method
Upload documents to remote storage.
Results must be emitted in the same order as the input requests.
For conditional uploads, RemoteUploadRequest.ifMatch carries the
expected ETag; backends should return RemoteUploadResult.conflict
on precondition failure.
Implementation
@override
Stream<RemoteUploadResult> upload(
Stream<RemoteUploadRequest<RawContent>> requests) async* {
await for (final request in requests) {
try {
final url = _documentUrlMapper.toDocumentUrl(request.documentIri);
yield await retryOnAuthFailure(
config: const AuthRetryConfig.retryOnce(),
onAuthFailure: _onAuthFailure,
operation: () => _client.upload(
url,
request.document,
requiresAuth: true,
ifMatch: request.ifMatch,
documentIri: request.documentIri,
),
);
} catch (e, st) {
yield ErrorUploadResult(
documentIri: request.documentIri,
requestETag: request.ifMatch,
error: e,
stackTrace: st,
);
}
}
}