@@ -47,133 +47,142 @@ PM> Install-Package HttpMultipartParser
4747
4848### Single file
4949
50- // stream:
51- -----------------------------41952539122868
52- Content-Disposition: form-data; name="username"
53-
54- example
55- -----------------------------41952539122868
56- Content-Disposition: form-data; name="email"
57-
58- 59- -----------------------------41952539122868
60- Content-Disposition: form-data; name="files[]"; filename="photo1.jpg"
61- Content-Type: image/jpeg
62-
63- ExampleBinaryData012031203
64- -----------------------------41952539122868--
65-
66- // ===== Simple Parsing ====
67- // You can parse synchronously:
68- var parser = MultipartFormDataParser.Parse(stream);
69-
70- // Or you can parse asynchronously:
71- var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false);
72-
73- // From this point the data is parsed, we can retrieve the
74- // form data using the GetParameterValue method.
75- var username = parser.GetParameterValue("username");
76- var email = parser.GetParameterValue("email")
50+ ```
51+ // stream:
52+ -----------------------------41952539122868
53+ Content-Disposition: form-data; name="username"
7754
78- // Files are stored in a list:
79- var file = parser.Files.First();
80- string filename = file.FileName;
81- Stream data = file.Data;
55+ example
56+ -----------------------------41952539122868
57+ Content-Disposition: form-data; name="email"
8258
83- // ==== Advanced Parsing ====
84- var parser = new StreamingMultipartFormDataParser(stream);
85- parser.ParameterHandler += parameter => DoSomethingWithParameter(parameter);
86- parser.FileHandler += (name, fileName, type, disposition, buffer, bytes, partNumber, additionalProperties) =>
87- {
88- // Write the part of the file we've received to a file stream. (Or do something else)
89- filestream.Write(buffer, 0, bytes);
90- }
59+ 60+ -----------------------------41952539122868
61+ Content-Disposition: form-data; name="files[]"; filename="photo1.jpg"
62+ Content-Type: image/jpeg
9163
92- // You can parse synchronously:
93- parser.Run();
64+ ExampleBinaryData012031203
65+ -----------------------------41952539122868--
66+ ```
9467
95- // Or you can parse asynchronously:
96- await parser.RunAsync().ConfigureAwait(false);
68+ ``` csharp
69+ // ===== Simple Parsing ====
70+ // You can parse synchronously:
71+ var parser = MultipartFormDataParser .Parse (stream );
72+
73+ // Or you can parse asynchronously:
74+ var parser = await MultipartFormDataParser .ParseAsync (stream ).ConfigureAwait (false );
75+
76+ // From this point the data is parsed, we can retrieve the
77+ // form data using the GetParameterValue method.
78+ var username = parser .GetParameterValue (" username" );
79+ var email = parser .GetParameterValue (" email" )
80+
81+ // Files are stored in a list:
82+ var file = parser .Files .First ();
83+ string filename = file .FileName ;
84+ Stream data = file .Data ;
85+
86+ // ==== Advanced Parsing ====
87+ var parser = new StreamingMultipartFormDataParser (stream );
88+ parser .ParameterHandler += parameter => DoSomethingWithParameter (parameter );
89+ parser .FileHandler += (name , fileName , type , disposition , buffer , bytes , partNumber , additionalProperties ) =>
90+ {
91+ // Write the part of the file we've received to a file stream. (Or do something else)
92+ filestream .Write (buffer , 0 , bytes );
93+ }
94+
95+ // You can parse synchronously:
96+ parser.Run();
97+
98+ // Or you can parse asynchronously:
99+ await parser .RunAsync ().ConfigureAwait (false );
100+ ```
97101
98102### Multiple Parameters
99103
100- // stream:
101- -----------------------------41952539122868
102- Content-Disposition: form-data; name="checkbox"
103-
104- likes_cake
105- -----------------------------41952539122868
106- Content-Disposition: form-data; name="checkbox"
104+ ```
105+ // stream:
106+ -----------------------------41952539122868
107+ Content-Disposition: form-data; name="checkbox"
107108
108- likes_cookies
109- -----------------------------41952539122868--
109+ likes_cake
110+ -----------------------------41952539122868
111+ Content-Disposition: form-data; name="checkbox"
110112
111- // ===== Simple Parsing ====
112- // You can parse synchronously:
113- var parser = MultipartFormDataParser.Parse(stream);
113+ likes_cookies
114+ -----------------------------41952539122868--
115+ ```
116+ ``` csharp
117+ // ===== Simple Parsing ====
118+ // You can parse synchronously:
119+ var parser = MultipartFormDataParser .Parse (stream );
120+
121+ // Or you can parse asynchronously:
122+ var parser = await MultipartFormDataParser .ParseAsync (stream ).ConfigureAwait (false );
123+
124+ // From this point the data is parsed, we can retrieve the
125+ // form data from the GetParameterValues method
126+ var checkboxResponses = parser .GetParameterValues (" checkbox" );
127+ foreach (var parameter in checkboxResponses )
128+ {
129+ Console .WriteLine (" Parameter {0} is {1}" , parameter .Name , parameter .Data )
130+ }
131+ ```
114132
115- // Or you can parse asynchronously:
116- var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false);
133+ ### Multiple Files
117134
118- // From this point the data is parsed, we can retrieve the
119- // form data from the GetParameterValues method
120- var checkboxResponses = parser.GetParameterValues("checkbox");
121- foreach(var parameter in checkboxResponses)
122- {
123- Console.WriteLine("Parameter {0} is {1}", parameter.Name, parameter.Data)
124- }
135+ ```
136+ // stream:
137+ -----------------------------41111539122868
138+ Content-Disposition: form-data; name="files[]"; filename="photo1.jpg"
139+ Content-Type: image/jpeg
140+
141+ MoreBinaryData
142+ -----------------------------41111539122868
143+ Content-Disposition: form-data; name="files[]"; filename="photo2.jpg"
144+ Content-Type: image/jpeg
145+
146+ ImagineLotsOfBinaryData
147+ -----------------------------41111539122868--
148+ ```
149+ ``` csharp
150+ // ===== Simple Parsing ====
151+ // You can parse synchronously:
152+ var parser = MultipartFormDataParser .Parse (stream );
125153
126- ### Multiple Files
154+ // Or you can parse asynchronously:
155+ var parser = await MultipartFormDataParser .ParseAsync (stream ).ConfigureAwait (false );
127156
128- // stream:
129- -----------------------------41111539122868
130- Content-Disposition: form-data; name="files[]"; filename="photo1.jpg"
131- Content-Type: image/jpeg
132-
133- MoreBinaryData
134- -----------------------------41111539122868
135- Content-Disposition: form-data; name="files[]"; filename="photo2.jpg"
136- Content-Type: image/jpeg
137-
138- ImagineLotsOfBinaryData
139- -----------------------------41111539122868--
140-
141- // ===== Simple Parsing ====
142- // You can parse synchronously:
143- var parser = MultipartFormDataParser.Parse(stream);
144-
145- // Or you can parse asynchronously:
146- var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false);
147-
148- // Loop through all the files
149- foreach(var file in parser.Files)
150- {
151- Stream data = file.Data;
152-
153- // Do stuff with the data.
154- }
155-
156- // ==== Advanced Parsing ====
157- var parser = new StreamingMultipartFormDataParser(stream);
158- parser.ParameterHandler += parameter => DoSomethingWithParameter(parameter);
159- parser.FileHandler += (name, fileName, type, disposition, buffer, bytes, partNumber, additionalProperties) =>
160- {
161- // Write the part of the file we've received to a file stream. (Or do something else)
162- // Assume that filesreamsByName is a Dictionary<string, FileStream> of all the files
163- // we are writing.
164- filestreamsByName[name].Write(buffer, 0, bytes);
165- };
166- parser.StreamClosedHandler += ()
167- {
168- // Do things when my input stream is closed
169- };
170-
171- // You can parse synchronously:
172- parser.Run();
173-
174- // Or you can parse asynchronously:
175- await parser.RunAsync().ConfigureAwait(false);
157+ // Loop through all the files
158+ foreach (var file in parser .Files )
159+ {
160+ Stream data = file .Data ;
176161
162+ // Do stuff with the data.
163+ }
164+
165+ // ==== Advanced Parsing ====
166+ var parser = new StreamingMultipartFormDataParser (stream );
167+ parser .ParameterHandler += parameter => DoSomethingWithParameter (parameter );
168+ parser .FileHandler += (name , fileName , type , disposition , buffer , bytes , partNumber , additionalProperties ) =>
169+ {
170+ // Write the part of the file we've received to a file stream. (Or do something else)
171+ // Assume that filesreamsByName is a Dictionary<string, FileStream> of all the files
172+ // we are writing.
173+ filestreamsByName [name ].Write (buffer , 0 , bytes );
174+ };
175+ parser .StreamClosedHandler += ()
176+ {
177+ // Do things when my input stream is closed
178+ };
179+
180+ // You can parse synchronously:
181+ parser .Run ();
182+
183+ // Or you can parse asynchronously:
184+ await parser .RunAsync ().ConfigureAwait (false );
185+ ```
177186## Licensing
178187
179188This project is licensed under MIT.
0 commit comments