One of the new additions in .NET is the ability to upload files without the need for additional components. The class HttpPostedFile deals with posted files. It has only a few members, but these cover anything you would want to do with an upload. Here is an example that hopefully demonstrates everything you need to know.
The one thing that you must remember when uploading files, is to set the encoding type. If you do not, it will not upload the file.
|
|
4 |
<form id="Form1" method="post" runat="server" enctype="multipart/form-data"> | |
Upload.aspx sample 1 |
Generated using CodeView |
So how easy is it to up load the file?
Very easy, it can be done in just one line.
In the supplied example, the class is copied into a variable for clarity as it will be referred to numerous times, so it takes three lines.
|
|
11 |
Dim File as HttpPostedFile | |
Upload.aspx.vb sample 1 |
Generated using CodeView |
|
|
21 |
File = Request.Files.Get(0) | |
Upload.aspx.vb sample 2 |
Generated using CodeView |
|
|
30 |
File.SaveAs(Server.MapPath("..\..\files\upload\deleteme.txt")) | |
Upload.aspx.vb sample 3 |
Generated using CodeView |
Note: The user ASPNET must have write access to the target directory if you wish to save the file.
A nice feature of the class if that the files size and type are available without having to save the file to disk.
In the example this is used to stop large files and files that cannot be displayed in the page.
|
|
23 |
if File.ContentLength > 1024 Then |
24 |
ErrorMsg.Text = "File is bigger than 1k" |
25 |
else |
26 |
if File.ContentType <> "text/plain" Then |
27 |
ErrorMsg.Text = "File is not a text file" | |
Upload.aspx.vb sample 4 |
Generated using CodeView |
The ContentType is set using the files MIME type, not the extension and recognizes most popular file formats.
So, all you want to do is process the file for the user or put it into a database, why bother saving it if you do not have to. The class gives you access to the upload stream which can be read just like any stream.
|
|
35 |
Dim sr as System.IO.StreamReader |
36 |
Dim strContent as string |
37 |
sr = new System.IO.StreamReader(File.InputStream) |
38 |
'display contents |
39 |
FileContents.Text = sr.ReadToEnd |
40 |
sr.Close() | |
Upload.aspx.vb sample 5 |
Generated using CodeView |
Note: If you wish to access the uploaded file as a stream and also want to save it to disk, save it first, as there is a slight lag when closing the stream which may cause the saved file to be empty.