preSignUploadFile method
Future<bool>
preSignUploadFile(
- Uri url,
- dynamic file, {
- int timeout = 1800,
- void progressCallback(
- int loaded,
- int total
)?,
})
override
Implementation
@override
Future<bool> preSignUploadFile(
Uri url,
dynamic file, {
int timeout = 1800,
void Function(int loaded, int total)? progressCallback,
}) async {
final completer = Completer<bool>();
final request = web.XMLHttpRequest();
try {
final webFile = file as web.File;
request.timeout = timeout * 1000;
request.onReadyStateChange.listen((event) {
// if (request.readyState == web.XMLHttpRequest.DONE) {
// if (request.status == 200) {
// } else {}
// }
});
request.onLoad.listen((event) {
if (request.status == 200) {
if (!completer.isCompleted) completer.complete(true);
} else {
if (!completer.isCompleted) completer.complete(false);
}
});
request.onError.listen((event) {
if (!completer.isCompleted) completer.complete(false);
});
web.EventStreamProviders.timeoutEvent.forTarget(request).listen((event) {
if (!completer.isCompleted) completer.complete(false);
});
web.EventStreamProviders.progressEvent.forTarget(request.upload).listen((
event,
) {
if (event.lengthComputable && progressCallback != null) {
// final percent = event.loaded / event.total * 100;
progressCallback(event.loaded, event.total);
}
});
request.open('PUT', url.toString(), true);
request.setRequestHeader('Content-Type', webFile.type);
request.setRequestHeader('Content-Length', webFile.size.toString());
request.setRequestHeader('x-upsert', 'true');
request.send(webFile);
} catch (err) {
logger.severe('Error at StorageUtilImpl.preSignUploadFile >>> $err');
if (!completer.isCompleted) completer.complete(false);
}
return completer.future.timeout(Duration(seconds: timeout), onTimeout: () {
request.abort();
return false;
});
}