Can't upload file via C# application

When i try to upload a file via a C# application, i always get an error
from ror.
Here is the error
Mon Jul 16 12:58:51 +0800 2007: Error calling Dispatcher.dispatch
#<EOFError: bad boundary end of body part>
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/cgi_multipart_eof_fix-2.1/lib/cgi_multipart_eof_fix.rb:106:in
read_multipart' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/cgi_ext/raw_post_data_fix.rb:38:in initialize_query’
C:/InstantRails/ruby/lib/ruby/1.8/cgi.rb:2275:in initialize' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/cgi.rb:50:in initialize’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:69:in
new' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:69:in process’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:618:in
process_client' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:617:in each’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:617:in
process_client' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in run’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in
initialize' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in new’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in
run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in initialize’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in
new' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in run’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:271:in
run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:270:in each’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:270:in
run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/bin/mongrel_rails:127:in run’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/command.rb:211:in
run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/bin/mongrel_rails:243 C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:488:in load’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:488:in
load' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in new_constants_in’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:488:in
load' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/commands/servers/mongrel.rb:60 C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in gem_original_require’
C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
require' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in require’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in
new_constants_in' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in require’
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/commands/server.rb:39
C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
gem_original_require' C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in require’
./script/server:3
-e:4:in `load’
-e:4

I don’t know what is going on.
And here is my c# code
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Net;
using System.IO;

namespace ConsoleApplication13
{
class Program
{
static void Main(string[] args)
{
Program test = new Program();
test.firstmethod();

    }
    private void firstmethod()
    {
        string url = "http://localhost:3002/filelink/upload2";
        string[] files = { "c:\\test.txt" };
        string logpath = null;
        UploadFilesToRemoteUrl(url, files, logpath);
    }
    private void UploadFilesToRemoteUrl(string url, string[] files,

string logpath)
{

        long length = 0;
        string boundary = "----------------------------" +

DateTime.Now.Ticks.ToString(“x”);

        HttpWebRequest httpWebRequest2 =

(HttpWebRequest)WebRequest.Create(url);
httpWebRequest2.ContentType = “multipart/form-data;
boundary=” + boundary;
httpWebRequest2.Method = “POST”;
httpWebRequest2.KeepAlive = true;

        httpWebRequest2.Credentials =
        System.Net.CredentialCache.DefaultCredentials;

        Stream memStream = new System.IO.MemoryStream();

        byte[] boundarybytes2 =

System.Text.Encoding.ASCII.GetBytes(“–” + boundary + “\r\n”);
byte[] boundarybytes =
System.Text.Encoding.ASCII.GetBytes(“\r\n–” + boundary + “\r\n”);

        memStream.Write(boundarybytes2,0,boundarybytes2.Length);
        length += boundarybytes2.Length;

        string headerTemplate = "Content-Disposition: form-data;

name="{0}"; filename="{1}"\r\n Content-Type:
application/octet-stream\r\n\r\n";

        for(int i=0;i<files.Length;i++)
        {

        string header =

string.Format(headerTemplate,“any_file”,files[i]);

        byte[] headerbytes =

System.Text.Encoding.UTF8.GetBytes(header);

        memStream.Write(headerbytes,0,headerbytes.Length);
        length += headerbytes.Length;

        FileStream fileStream = new FileStream(files[i],

FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[1024];

        int bytesRead = 0;

        while ( (bytesRead = fileStream.Read(buffer, 0,

buffer.Length)) != 0 )
{
memStream.Write(buffer, 0, bytesRead);
length += bytesRead;
}

        memStream.Write(boundarybytes,0,boundarybytes.Length);
        length += boundarybytes.Length;

        fileStream.Close();
        }

        httpWebRequest2.ContentLength = memStream.Length;

        Stream requestStream = httpWebRequest2.GetRequestStream();

        memStream.Position = 0;
        byte[] tempBuffer = new byte[memStream.Length];
        memStream.Read(tempBuffer,0,tempBuffer.Length);
        memStream.Close();
        requestStream.Write(tempBuffer,0,tempBuffer.Length );
        requestStream.Close();


        WebResponse webResponse2 = httpWebRequest2.GetResponse();

        Stream stream2 = webResponse2.GetResponseStream();
        StreamReader reader2 = new StreamReader(stream2);


        Console.WriteLine(reader2.ReadToEnd());

        webResponse2.Close();
        httpWebRequest2 = null;
        webResponse2 = null;

        }
}

}

Here is My ruby on rails code
class FilelinkController < ApplicationController
require “ftools”
scaffold :filelink

def index
redirect_to :action => “list”
end
def list
@filelink = Filelink.find_all
end

def uploads
link = String.new()
@link = Date.today().strftime(“%d_%m_%y”).to_s()
@filelink = Filelink.new()
@filelink[‘patientname’] = @params[‘patientname’]
@filelink[‘filelink’] = “#{RAILS_ROOT}/public/file/”+@link+“.txt”
File.open(@filelink[‘filelink’], “wb”) { |f|
f.write(@params[‘any_file’].read) }
#do |f|
#f.write(@params[‘any_file’].read)
#end
@filelink.save
redirect_to :action => “list”
end
###The Used Part
def upload2
if File.size?(@params[‘any_file’])>0
File.open(“#{RAILS_ROOT}/public/file/try.txt”, “wb”) do |f|
f.write(@params[‘any_file’].read)
end
else
redirect_to :action =>“list”
end
redirect_to :action =>“list”
end

end

And here is the form

Upload file form

Add a patient records

The HeartBeat file :


For more information, i use Aptana as the development platform of ror,
and i use visual studio.net 2005 as the c# development platform.