<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Brian Grinstead &#187; vb.net</title>
	<atom:link href="http://www.briangrinstead.com/blog/tag/vb-net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.briangrinstead.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 10 Aug 2010 18:26:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Multipart Form Post in C#</title>
		<link>http://www.briangrinstead.com/blog/multipart-form-post-in-c</link>
		<comments>http://www.briangrinstead.com/blog/multipart-form-post-in-c#comments</comments>
		<pubDate>Fri, 08 May 2009 14:58:07 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[All]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://www.briangrinstead.com/?p=119</guid>
		<description><![CDATA[I recently had to access a web API through C Sharp that required a file upload. This is pretty easy if you have an HTML page with a form tag and you want a user to directly upload the file. &#60;form method=&#34;POST&#34; action=&#34;http://localhost/&#34; enctype=&#34;multipart/form-data&#34;&#62; File : &#60;input type=&#34;file&#34; name=&#34;content&#34; size=&#34;38&#34; /&#62;&#60;br /&#62; &#60;input type=&#34;hidden&#34; name=&#34;id&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had to access a web API through C Sharp that required a file upload.  This is pretty easy if you have an HTML page with a form tag and you want a user to directly upload the file.</p>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;form method=&quot;POST&quot; action=&quot;http://localhost/&quot; enctype=&quot;multipart/form-data&quot;&gt;
	File : &lt;input type=&quot;file&quot; name=&quot;content&quot; size=&quot;38&quot; /&gt;&lt;br /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;id&quot; value='fileUpload' /&gt;
 &lt;/form&gt;</pre></div></div>


<p>However, this is not always a reasonable path to take.  Sometimes you may be wanting to access a file that is already in a system and you don&#8217;t want a new upload.  If you are accessing an external API, this is probably always the case.  Unfortunately, building this post using C# is not quite as straightforward.  I first tried using the WebClient UploadFile method, but it didn&#8217;t fit my needs because I wanted to upload form values (id, filename, other API specific parameters) in addition to just a file.</p>

<p>So, I needed to roll my own form post.  Here is the <a href='http://www.ietf.org/rfc/rfc2388.txt'>Multipart Form RFC</a> and the <a href='http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2'>W3C Specification</a> for multipart/form data.  After reading these links and searching some <a href='http://stackoverflow.com/questions/219827/multipart-forms-from-c-client'>forums</a>, here is what I came up with.</p>

<p><ins>Note: If anyone is interested in this code in Visual Basic, reader Mike Ferreira <a href='#comment-1153'>converted the code into VB.Net</a> in a comment below.</ins></p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #0600FF;color: #0000FF;">static</span> <span style="color: #FF0000;color: #0000FF;">class</span> FormUpload
<span style="color: #000000;color: #000000;">&#123;</span>
	<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #0600FF;color: #0000FF;">static</span> <span style="color: #0600FF;color: #0000FF;">readonly</span> Encoding encoding <span style="color: #008000;color: #000000;">=</span> Encoding.<span style="color: #0000FF;">UTF8</span><span style="color: #008000;color: #000000;">;</span>
	<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #0600FF;color: #0000FF;">static</span> HttpWebResponse MultipartFormDataPost<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">string</span> postUrl, <span style="color: #FF0000;color: #0000FF;">string</span> userAgent, Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span> postParameters<span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		<span style="color: #FF0000;color: #0000FF;">string</span> formDataBoundary <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;-----------------------------28947758029299&quot;</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #FF0000;color: #0000FF;">string</span> contentType <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;multipart/form-data; boundary=&quot;</span> <span style="color: #008000;color: #000000;">+</span> formDataBoundary<span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> formData <span style="color: #008000;color: #000000;">=</span> GetMultipartFormData<span style="color: #000000;color: #000000;">&#40;</span>postParameters, formDataBoundary<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">return</span> PostForm<span style="color: #000000;color: #000000;">&#40;</span>postUrl, userAgent, contentType, formData<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
	<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #0600FF;color: #0000FF;">static</span> HttpWebResponse PostForm<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">string</span> postUrl, <span style="color: #FF0000;color: #0000FF;">string</span> userAgent, <span style="color: #FF0000;color: #0000FF;">string</span> contentType, <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> formData<span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		HttpWebRequest request <span style="color: #008000;color: #000000;">=</span> WebRequest.<span style="color: #0000FF;">Create</span><span style="color: #000000;color: #000000;">&#40;</span>postUrl<span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #0600FF;color: #0000FF;">as</span> HttpWebRequest<span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>request <span style="color: #008000;color: #000000;">==</span> <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span>
		<span style="color: #000000;color: #000000;">&#123;</span>
			<span style="color: #0600FF;color: #0000FF;">throw</span> <span style="color: #008000;color: #0000FF;">new</span> NullReferenceException<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;request is not a http request&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #008080; font-style: italic;color: #008000;">// Set up the request properties</span>
		request.<span style="color: #0000FF;">Method</span> <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;POST&quot;</span><span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;color: #000000;">=</span> contentType<span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">UserAgent</span> <span style="color: #008000;color: #000000;">=</span> userAgent<span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">CookieContainer</span> <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> CookieContainer<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">ContentLength</span> <span style="color: #008000;color: #000000;">=</span> formData.<span style="color: #0000FF;">Length</span><span style="color: #008000;color: #000000;">;</span>  <span style="color: #008080; font-style: italic;color: #008000;">// We need to count how many bytes we're sending. </span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">using</span> <span style="color: #000000;color: #000000;">&#40;</span>Stream requestStream <span style="color: #008000;color: #000000;">=</span> request.<span style="color: #0000FF;">GetRequestStream</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span>
		<span style="color: #000000;color: #000000;">&#123;</span>
			<span style="color: #008080; font-style: italic;color: #008000;">// Push it out there</span>
			requestStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>formData, <span style="color: #FF0000;color: #808080;">0</span>, formData.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
			requestStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">return</span> request.<span style="color: #0000FF;">GetResponse</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #0600FF;color: #0000FF;">as</span> HttpWebResponse<span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #0600FF;color: #0000FF;">static</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> GetMultipartFormData<span style="color: #000000;color: #000000;">&#40;</span>Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span> postParameters, <span style="color: #FF0000;color: #0000FF;">string</span> boundary<span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		Stream formDataStream <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">MemoryStream</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">foreach</span> <span style="color: #000000;color: #000000;">&#40;</span>var param <span style="color: #0600FF;color: #0000FF;">in</span> postParameters<span style="color: #000000;color: #000000;">&#41;</span>
		<span style="color: #000000;color: #000000;">&#123;</span>
			<span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>param.<span style="color: #0000FF;">Value</span> <span style="color: #008000;color: #0000FF;">is</span> FileParameter<span style="color: #000000;color: #000000;">&#41;</span>
			<span style="color: #000000;color: #000000;">&#123;</span>
				FileParameter fileToUpload <span style="color: #008000;color: #000000;">=</span> <span style="color: #000000;color: #000000;">&#40;</span>FileParameter<span style="color: #000000;color: #000000;">&#41;</span>param.<span style="color: #0000FF;">Value</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
				<span style="color: #008080; font-style: italic;color: #008000;">// Add just the first part of this param, since we will write the file data directly to the Stream</span>
				<span style="color: #FF0000;color: #0000FF;">string</span> header <span style="color: #008000;color: #000000;">=</span> <span style="color: #FF0000;color: #0000FF;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;--{0}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>Content-Disposition: form-data; name=<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>{1}<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>; filename=<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>{2}<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>;<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>Content-Type: {3}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span><span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>&quot;</span>, 
					boundary, 
					param.<span style="color: #0000FF;">Key</span>, 
					fileToUpload.<span style="color: #0000FF;">FileName</span> <span style="color: #008000;color: #000000;">??</span> param.<span style="color: #0000FF;">Key</span>, 
					fileToUpload.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;color: #000000;">??</span> <span style="color: #666666;color: #808080;">&quot;application/octet-stream&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
				formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;color: #000000;">&#40;</span>header<span style="color: #000000;color: #000000;">&#41;</span>, <span style="color: #FF0000;color: #808080;">0</span>, header.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
				<span style="color: #008080; font-style: italic;color: #008000;">// Write the file data directly to the Stream, rather than serializing it to a string.</span>
				formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>fileToUpload.<span style="color: #0000FF;">File</span>, <span style="color: #FF0000;color: #808080;">0</span>, fileToUpload.<span style="color: #0000FF;">File</span>.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
			<span style="color: #000000;color: #000000;">&#125;</span>
			<span style="color: #0600FF;color: #0000FF;">else</span>
			<span style="color: #000000;color: #000000;">&#123;</span>
				<span style="color: #FF0000;color: #0000FF;">string</span> postData <span style="color: #008000;color: #000000;">=</span> <span style="color: #FF0000;color: #0000FF;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;--{0}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>Content-Disposition: form-data; name=<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>{1}<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span><span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span><span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>{2}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>&quot;</span>, 
					boundary, 
					param.<span style="color: #0000FF;">Key</span>, 
					param.<span style="color: #0000FF;">Value</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
				formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;color: #000000;">&#40;</span>postData<span style="color: #000000;color: #000000;">&#41;</span>, <span style="color: #FF0000;color: #808080;">0</span>, postData.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
			<span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #008080; font-style: italic;color: #008000;">// Add the end of the request</span>
		<span style="color: #FF0000;color: #0000FF;">string</span> footer <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>--&quot;</span> <span style="color: #008000;color: #000000;">+</span> boundary <span style="color: #008000;color: #000000;">+</span> <span style="color: #666666;color: #808080;">&quot;--<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>&quot;</span><span style="color: #008000;color: #000000;">;</span>
		formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;color: #000000;">&#40;</span>footer<span style="color: #000000;color: #000000;">&#41;</span>, <span style="color: #FF0000;color: #808080;">0</span>, footer.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #008080; font-style: italic;color: #008000;">// Dump the Stream into a byte[]</span>
		formDataStream.<span style="color: #0000FF;">Position</span> <span style="color: #008000;color: #000000;">=</span> <span style="color: #FF0000;color: #808080;">0</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> formData <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span>formDataStream.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#93;</span><span style="color: #008000;color: #000000;">;</span>
		formDataStream.<span style="color: #0000FF;">Read</span><span style="color: #000000;color: #000000;">&#40;</span>formData, <span style="color: #FF0000;color: #808080;">0</span>, formData.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		formDataStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">return</span> formData<span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">class</span> FileParameter
	<span style="color: #000000;color: #000000;">&#123;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> File <span style="color: #000000;color: #000000;">&#123;</span> get<span style="color: #008000;color: #000000;">;</span> set<span style="color: #008000;color: #000000;">;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">string</span> FileName <span style="color: #000000;color: #000000;">&#123;</span> get<span style="color: #008000;color: #000000;">;</span> set<span style="color: #008000;color: #000000;">;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">string</span> ContentType <span style="color: #000000;color: #000000;">&#123;</span> get<span style="color: #008000;color: #000000;">;</span> set<span style="color: #008000;color: #000000;">;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> FileParameter<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> file<span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #008000;color: #000000;">:</span> <span style="color: #0600FF;color: #0000FF;">this</span><span style="color: #000000;color: #000000;">&#40;</span>file, <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #000000;color: #000000;">&#123;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> FileParameter<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> file, <span style="color: #FF0000;color: #0000FF;">string</span> filename<span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #008000;color: #000000;">:</span> <span style="color: #0600FF;color: #0000FF;">this</span><span style="color: #000000;color: #000000;">&#40;</span>file, filename, <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #000000;color: #000000;">&#123;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> FileParameter<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> file, <span style="color: #FF0000;color: #0000FF;">string</span> filename, <span style="color: #FF0000;color: #0000FF;">string</span> contenttype<span style="color: #000000;color: #000000;">&#41;</span> 
		<span style="color: #000000;color: #000000;">&#123;</span>
			File <span style="color: #008000;color: #000000;">=</span> file<span style="color: #008000;color: #000000;">;</span>
			FileName <span style="color: #008000;color: #000000;">=</span> filename<span style="color: #008000;color: #000000;">;</span>
			ContentType <span style="color: #008000;color: #000000;">=</span> contenttype<span style="color: #008000;color: #000000;">;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
<span style="color: #000000;color: #000000;">&#125;</span></pre></div></div>


<p>Here is the code to call the MultipartFormDataPost function with multiple parameters, including a file.</p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Read file data</span>
FileStream fs <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> FileStream<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;c:<span style="color: #008080; font-weight: bold;color: #808080;">\\</span>people.doc&quot;</span>, FileMode.<span style="color: #0000FF;">Open</span>, FileAccess.<span style="color: #0000FF;">Read</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> data <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span>fs.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#93;</span><span style="color: #008000;color: #000000;">;</span>
fs.<span style="color: #0000FF;">Read</span><span style="color: #000000;color: #000000;">&#40;</span>data, <span style="color: #FF0000;color: #808080;">0</span>, data.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
fs.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Generate post objects</span>
Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span> postParameters <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
postParameters.<span style="color: #0000FF;">Add</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;filename&quot;</span>, <span style="color: #666666;color: #808080;">&quot;People.doc&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
postParameters.<span style="color: #0000FF;">Add</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;fileformat&quot;</span>, <span style="color: #666666;color: #808080;">&quot;doc&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
postParameters.<span style="color: #0000FF;">Add</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;file&quot;</span>, <span style="color: #008000;color: #0000FF;">new</span> FormUpload.<span style="color: #0000FF;">FileParameter</span><span style="color: #000000;color: #000000;">&#40;</span>data, <span style="color: #666666;color: #808080;">&quot;People.doc&quot;</span>, <span style="color: #666666;color: #808080;">&quot;application/msword&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Create request and receive response</span>
<span style="color: #FF0000;color: #0000FF;">string</span> postURL <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;http://localhost&quot;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #FF0000;color: #0000FF;">string</span> userAgent <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;Someone&quot;</span><span style="color: #008000;color: #000000;">;</span>
HttpWebResponse webResponse <span style="color: #008000;color: #000000;">=</span> FormUpload.<span style="color: #0000FF;">MultipartFormDataPost</span><span style="color: #000000;color: #000000;">&#40;</span>postURL, userAgent, postParameters<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Process response</span>
StreamReader responseReader <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> StreamReader<span style="color: #000000;color: #000000;">&#40;</span>webResponse.<span style="color: #0000FF;">GetResponseStream</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #FF0000;color: #0000FF;">string</span> fullResponse <span style="color: #008000;color: #000000;">=</span> responseReader.<span style="color: #0000FF;">ReadToEnd</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
webResponse.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
Response.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>fullResponse<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span></pre></div></div>


<p>Hopefully this code can help someone, figuring out exactly where to place the boundary and newlines in between form key-value pairs caused a little bit of grief during development.  This is some functionality that would be really nice inside of the language library, but it seems like in most languages this is something you end up coding yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.briangrinstead.com/blog/multipart-form-post-in-c/feed</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
	</channel>
</rss>
