handleMultipartFormdata function
Implementation
Future<FormData> handleMultipartFormdata(
HttpRequest request, String boundary, FormData formData) async {
final mimeTransformer = MimeMultipartTransformer(boundary);
final parts = request.cast<List<int>>().transform(mimeTransformer);
await for (final part in parts) {
final headers = part.headers;
final contentType = headers['content-type'];
final contentDisposition = headers['content-disposition'];
final nameMatch =
RegExp(r'name="([^"]*)"').firstMatch(contentDisposition ?? '');
final fieldName = nameMatch?.group(1);
final filenameMatch =
RegExp(r'filename="([^"]*)"').firstMatch(contentDisposition ?? '');
final filename = filenameMatch?.group(1);
if (fieldName != null) {
if (contentType != null || filename != null) {
// Stream file to temporary storage
final fileInfo = await _streamToStorage(part,
originalFilename: filename, customFilePath: null);
Map<String, dynamic> fieldData = {
'path': fileInfo['path'],
'mimeType': contentType,
'originalname': filename,
'fieldName': fieldName,
'size': fileInfo['size'],
'tempFilename': fileInfo['tempFilename'],
};
formData.append(fieldName, json.encode(fieldData));
} else {
// Handle plain text data as string
final content = await utf8.decoder.bind(part).join();
formData.append(fieldName, content);
}
}
}
return formData;
}