Created
March 23, 2020 13:44
-
-
Save Bujupah/7606129fd7974a980321cb94ff018b00 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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