uploadFile method
upload from client
Implementation
Future<void> uploadFile(String outPath) async {
try {
final contentType = headers.contentType;
if (contentType == null ||
!contentType.mimeType.startsWith('multipart/form-data')) {
response
..statusCode = HttpStatus.unsupportedMediaType
..write('Only multipart/form-data supported')
..close();
return;
}
// parse multipart form
final transformer = MimeMultipartTransformer(
contentType.parameters['boundary']!,
);
final bodyStream = cast<List<int>>().transform(transformer);
await for (MimeMultipart part in bodyStream) {
final headers = part.headers;
if (headers['content-disposition'] != null &&
headers['content-disposition']!.contains('filename=')) {
// extract filename
final contentDisposition = headers['content-disposition']!;
final filename =
RegExp(
r'filename="(.+)"',
).firstMatch(contentDisposition)?.group(1) ??
'upload_${DateTime.now().millisecondsSinceEpoch}';
final file = File('$outPath/$filename');
await file.create(recursive: true);
final sink = file.openWrite();
await part.pipe(sink);
await sink.close();
TLogger.instance.showLog(
"Uploaded file: ${file.path}",
tag: 'uploadFile',
);
}
}
response
..statusCode = HttpStatus.ok
..write('Upload successful')
..close();
} catch (e) {
TLogger.instance.showLog(e.toString(), tag: 'uploadFile');
response
..statusCode = HttpStatus.internalServerError
..write('Server Error')
..close();
}
}