Skip to content

Instantly share code, notes, and snippets.

@Bujupah
Created March 23, 2020 13:44
Show Gist options
  • Save Bujupah/7606129fd7974a980321cb94ff018b00 to your computer and use it in GitHub Desktop.
Save Bujupah/7606129fd7974a980321cb94ff018b00 to your computer and use it in GitHub Desktop.
import 'dart:async';
import 'dart:convert';
import 'package:mime/mime.dart';
import 'package:sv_rent_car/src/services/data_contract_service.dart';
import 'package:sv_rent_car/sv_rent_car.dart';
class MultiPartFormDataParser{
static Future<Object> multiPartData({Request request, Object object, String folder, Function onTextData, Function onFileData}) async {
final transformer = MimeMultipartTransformer(request.raw.headers.contentType.parameters["boundary"]);
final parts = await transformer.bind(Stream.fromIterable([await request.body.decode<List<int>>()])).toList();
for (var part in parts) {
final multipart = HttpMultipartFormData.parse(part);
try{
if(multipart.isText)
onTextData(await multipart);
else{
final ContentType contentType = multipart.contentType;
final content = multipart.cast<List<int>>();
final fileName = fileNameGenerator(multipart.contentDisposition.parameters.values.first, contentType.subType.split('/').last);
onFileData(await multipart, '$folder/$fileName');
final IOSink sink = File('$folder/$fileName').openWrite();
await for (List<int> item in content) {
sink.add(item);
};
await sink.flush();
await sink.close();
}
}catch(e){
print("MultipartFormData Exception : \n ${e}");
}
}
return object;
}
static String fileNameGenerator(String filename, String extension){
final str = "${DateTime.now().toIso8601String()}$filename";
final bytes = utf8.encode(str);
final base64Str = base64.encode(bytes);
return '$base64Str.$extension';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment