perform method
Implementation
@override
Future<CubeFile> perform() async {
Completer<CubeFile> completer = Completer();
try {
String uuid = const Uuid().v4();
CubeFile toCreate = CubeFile();
toCreate.isPublic = isPublic ?? false;
toCreate.name = _name ?? basename(_file!.path);
if (!isEmpty(mimeType)) {
toCreate.contentType = mimeType;
} else {
toCreate.contentType = lookupMimeType(toCreate.name!);
}
_CreateBlobQuery(toCreate).perform().then((cubeBlob) {
toCreate.id = cubeBlob.id;
toCreate.uid = cubeBlob.uid;
var length = _file != null ? _file!.lengthSync() : _bytes!.length;
String amazonParams = cubeBlob.fileObjectAccess!.params!;
Uri decodedUri = Uri.parse(amazonParams);
Map<String, String> params = decodedUri.queryParameters.map(
(key, value) => MapEntry(key, Uri.decodeQueryComponent(value)));
MultipartRequestProgressed multipartRequest =
MultipartRequestProgressed(
"POST",
Uri(
scheme: decodedUri.scheme,
host: decodedUri.host,
path: decodedUri.path),
onProgress: (int bytes, int total) {
final int newProgress = ((bytes / total) * 100).toInt();
if (newProgress != _progress) {
if (onProgress != null) {
onProgress!(newProgress);
}
_progress = newProgress;
}
},
);
ByteStream stream = _file != null
? ByteStream(StreamView(_file!.openRead()))
: ByteStream.fromBytes(_bytes!);
MultipartFile multipartFile = MultipartFile('file', stream, length,
filename: toCreate.name,
contentType: MediaType.parse(cubeBlob.contentType!));
multipartRequest.files.add(multipartFile);
multipartRequest.fields.addAll(params);
_logAmazonRequest(multipartRequest, uuid);
multipartRequest.send().then((response) {
_logAmazonResponse(response, uuid).then((voidValue) {
if (response.statusCode == 201) {
toCreate.size = length;
DeclareBlobCompletedQuery(cubeBlob.id!, length)
.perform()
.then((voidResult) {
toCreate.completedAt = DateTime.now();
completer.complete(toCreate);
});
}
});
});
}).catchError((error) {
handelError(error);
completer.completeError(error);
});
} catch (e) {
completer.completeError(e);
}
return completer.future;
}