requestfile function
Implementation
Future<Response> requestfile(RequestApiHelperData config, {Function(int uploaded, int total)? onProgress}) async {
final httpClients = getHttpClient();
Uri _http = Uri.parse(config.baseUrl!);
final response = await httpClients.postUrl(_http);
int byteCount = 0;
var request = MultipartRequest("POST", _http);
Map<String, String> body = {};
if (config.body is Map) {
body = MapBuilder.build(config.body);
request.fields.addAll(body);
}
for (int counterfile = 0; counterfile < (config.file?.path ?? []).length; counterfile++) {
if (config.file!.path[counterfile] == '' || config.file!.path[counterfile] == 'null') {
request.fields[config.file!.requestName[counterfile]] = 'null';
} else {
request.files.add(await MultipartFile.fromPath(config.file!.requestName[counterfile], config.file!.path[counterfile], contentType: MediaType('application', config.file!.path[counterfile].split('.').last)));
}
}
Stream<List<int>>? streamUpload;
request.headers.addAll(config.header!);
if (onProgress != null) {
var msStream = request.finalize();
var totalByteLength = request.contentLength;
if (config.debug ?? false) {}
String decodes = request.headers[HttpHeaders.contentTypeHeader] ?? '';
config.header?.forEach((key, value) {
if (response.headers.value(key) == null) {
response.headers.add(key, value);
}
});
response.headers.set(HttpHeaders.contentTypeHeader, {decodes});
getSize('Header ', response.headers.toString(), debug: config.debug ?? false);
streamUpload = msStream.transform(
StreamTransformer.fromHandlers(
handleData: (data, sink) {
sink.add(data);
byteCount += data.length;
onProgress(byteCount, totalByteLength);
},
handleError: (error, stack, sink) {
throw error;
},
handleDone: (sink) {
sink.close();
},
),
);
await response.addStream(streamUpload);
final res = await response.close();
final getResponse = await readResponseAsString(res);
return Response(getResponse, res.statusCode);
} else {
request.headers['content-type'] = 'multipart/form-data';
final getResponse = await request.send();
return Response(await getResponse.stream.bytesToString(), getResponse.statusCode);
}
}