uploadFile method
This will use filePath
if blobData
is null.
Implementation
Future<Response> uploadFile(String fileKey, String? filePath,
{String? blobName,
List<int>? blobData,
String? url,
IsolateModel? isolateModel,
StreamTransformer<List<int>, String>? decoder,
Function(int bytes, int totalBytes)? onProgress,
Function(Function c)? cancelToken,
OnTimeout? onTimeout,
Duration? timeLimit}) async {
// if (await isConnected())
if (client == null) client = http.Client();
if (timeLimit == null) timeLimit = config.uploadTimeout;
var request = isolateModel!.request;
var req = FileRequest(request.method.value, Uri.parse(url ?? config.url),
(bytes, totalBytes) {
_print('Upload progress : ' + (bytes / totalBytes).toString());
if (onProgress != null) onProgress(bytes, totalBytes);
});
if (blobData != null) {
req.files.add(http.MultipartFile.fromBytes(fileKey, blobData,
contentType: MediaType('application', 'octet-stream'),
filename: blobName));
} else {
req.files.add(await http.MultipartFile.fromPath(fileKey, filePath!));
}
Crypto crypto = Crypto(config.secretKey, config.publicKey);
String requestMessage = _prepareRequestMessage(crypto, isolateModel);
req.fields[isolateModel.requestParamName] = requestMessage;
req.fields['os'] = _getOS();
// cancelToken?.throwIfCancellationRequested();
// var res = await RetryHelper.tryRun<http.StreamedResponse>(() {
// return CancellationTokenSource.register(cancelToken, req.send());
// }, cancelToken: cancelToken);
if (cancelToken != null) cancelToken(req.close);
var res = await req.send().timeout(timeLimit, onTimeout: onTimeout);
// if (res != null) {
if (res.statusCode == 200) {
var responseBody = await res.stream.bytesToString();
var responseMessage = responseBody;
_print('raw response : ' + responseMessage);
responseMessage = _decrypt(crypto, isolateModel, responseMessage);
try {
var jsonResponse = convert.jsonDecode(responseMessage);
_print('json decoded : ' + jsonResponse.toString());
return Response(
responseBody,
res.statusCode,
result: jsonResponse,
state: ResponseState.SUCCESS,
);
} catch (e) {
_print('json decoded exception : ' + e.toString());
return Response(
responseBody,
res.statusCode,
result: null,
state: ResponseState.UNEXPECTED,
);
}
// res.stream
// .transform(decoder ?? convert.utf8.decoder)
// .listen((responseBody) {
// var responseMessage = responseBody;
//
//
// });
} else {
// error
_print(res.statusCode.toString() + ' ' + res.reasonPhrase!);
return Response(res.reasonPhrase, res.statusCode,
result: null, state: ResponseState.ERROR);
}
// } else {
// _print('http response is null!');
// return Response('http response is null!', -1,
// result: null, state: ResponseState.ERROR);
// }
// else {
// return Response('Check your network connection!', -1,
// result: null, state: ResponseState.NETWORK_CONNECTION);
// }
}