I’m developing a website and I’d like the users be able to upload files to the server using a webpage.
The server side is .NET, but it’s not ASP.NET. That means, I’m generating the html code myself instead using ASP.NET, and I’m working with the GET string and POST stream directly. It’s a good exercise to learn what happens under the hood :D, specially nowadays when there is a framework for everything.
I’ve been trying to find information about this, but I found several approaches, some of them javascript (thing I want to avoid for the time being) and lots of premade controls. What I want is to do it myself, I don’t care if there is a nice, nifty and well-proven ASP.NET control… what I want is understand how it do that with all its implications.
Cheers!
In the HTML you need a form with an input of type=”file” and the enctype attribute of the form set to “multipart/form-data” rather than the default of “application/x-www-form-urlencoded”.
Multipart/form-data is defined in RFC 2388, and will behave differently to the application/x-www-form-urlencoded you’ve been parsing with this experiment so far, though it’s quite straight-forward. The RFC should give you all you need to know to replicate how the HttpRequest.Files property works in ASP.NET.
An extension of this, try sending streams from XMLHttpRequest in a page or HttpWebRequest in a .NET client application, using both POST and PUT (you may have to change IIS settings to allow the PUT through), as this the overlap of working on that along with your experiments here will cover some knowledge that has some real applicability even when you are using all the toolkits. Another extension is to try implementing both sides of both schemes in RFC2617 without any help from the framework (sometimes the server side of this is genuinely useful).
Kudos for experimenting with this, it should bring real experience to back up what you can learn from reading RFC 2616 (though that’s still absolutely vital for anyone doing web stuff to be intimiately familiar with, as reading will cover some cases your experiments don’t touch on, and explain anything that seems strange in your results).