Resolved all issues

This commit is contained in:
thosakwe 2016-12-04 21:31:25 -05:00
parent 10e2516301
commit 374b80c44d
5 changed files with 42 additions and 34 deletions

1
.travis.yml Normal file
View file

@ -0,0 +1 @@
language: dart

View file

@ -1,5 +1,6 @@
# Body Parser # Body Parser
![version 1.0.0-dev+1](https://img.shields.io/badge/version-1.0.0--dev-red.svg) ![version 1.0.0-dev+2](https://img.shields.io/badge/version-1.0.0--dev+2-red.svg)
![build status](https://travis-ci.org/thosakwe/body_parser.svg)
**NOT YET PRODUCTION READY** **NOT YET PRODUCTION READY**

View file

@ -17,42 +17,48 @@ import 'map_from_uri.dart';
Future<BodyParseResult> parseBody(HttpRequest request) async { Future<BodyParseResult> parseBody(HttpRequest request) async {
var result = new BodyParseResult(); var result = new BodyParseResult();
if (request.headers.contentType != null) { try {
if (request.headers.contentType.primaryType == 'multipart' && if (request.headers.contentType != null) {
request.headers.contentType.parameters.containsKey('boundary')) { if (request.headers.contentType.primaryType == 'multipart' &&
var parts = request request.headers.contentType.parameters.containsKey('boundary')) {
.transform(new MimeMultipartTransformer( var parts = request
request.headers.contentType.parameters['boundary'])) .transform(new MimeMultipartTransformer(
.map((part) => request.headers.contentType.parameters['boundary']))
HttpMultipartFormData.parse(part, defaultEncoding: UTF8)); .map((part) =>
HttpMultipartFormData.parse(part, defaultEncoding: UTF8));
await for (HttpMultipartFormData part in parts) { await for (HttpMultipartFormData part in parts) {
if (part.isBinary || part.contentDisposition.parameters.containsKey("filename")) { if (part.isBinary ||
BytesBuilder builder = await part.fold(new BytesBuilder(), (BytesBuilder b, d) => b..add(d is! String ? d : d.codeUnits)); part.contentDisposition.parameters.containsKey("filename")) {
var upload = new FileUploadInfo( BytesBuilder builder = await part.fold(new BytesBuilder(),
mimeType: part.contentType.mimeType, (BytesBuilder b, d) => b..add(d is! String ? d : d.codeUnits));
name: part.contentDisposition.parameters['name'], var upload = new FileUploadInfo(
filename: part.contentDisposition.parameters['filename'] ?? 'file', mimeType: part.contentType.mimeType,
data: builder.takeBytes()); name: part.contentDisposition.parameters['name'],
result.files.add(upload); filename:
} else if (part.isText) { part.contentDisposition.parameters['filename'] ?? 'file',
var text = await part.join(); data: builder.takeBytes());
buildMapFromUri(result.body, '${part.contentDisposition.parameters["name"]}=$text'); result.files.add(upload);
} else { } else if (part.isText) {
print("Found something else : ${part.contentDisposition}"); var text = await part.join();
buildMapFromUri(result.body,
'${part.contentDisposition.parameters["name"]}=$text');
}
} }
} else if (request.headers.contentType.mimeType ==
ContentType.JSON.mimeType) {
result.body
.addAll(JSON.decode(await request.transform(UTF8.decoder).join()));
} else if (request.headers.contentType.mimeType ==
'application/x-www-form-urlencoded') {
String body = await request.transform(UTF8.decoder).join();
buildMapFromUri(result.body, body);
} }
} else if (request.headers.contentType.mimeType == } else if (request.uri.hasQuery) {
ContentType.JSON.mimeType) { buildMapFromUri(result.query, request.uri.query);
result.body
.addAll(JSON.decode(await request.transform(UTF8.decoder).join()));
} else if (request.headers.contentType.mimeType ==
'application/x-www-form-urlencoded') {
String body = await request.transform(UTF8.decoder).join();
buildMapFromUri(result.body, body);
} }
} else if (request.uri.hasQuery) { } catch (e) {
buildMapFromUri(result.query, request.uri.query); //
} }
return result; return result;

View file

@ -1,6 +1,6 @@
name: body_parser name: body_parser
author: Tobe O <thosakwe@gmail.com> author: Tobe O <thosakwe@gmail.com>
version: 1.0.0-dev+1 version: 1.0.0-dev+2
description: Parse request bodies and query strings in Dart. description: Parse request bodies and query strings in Dart.
homepage: https://github.com/thosakwe/body_parser homepage: https://github.com/thosakwe/body_parser
dependencies: dependencies: