views:

383

answers:

4

I am using the <input type="file" /> tag to upload a file to the server. How do I access the file at the server side and store it at the server? (The file is an image file)

The client side code is :

<form id="form1" action="PhotoStore.aspx" enctype="multipart/form-data">
    <div>
    <input type="file" id="file" onchange="preview(this)" />
    <input type="submit" />
    </div>
</form>

Photostore.aspx.cs has

protected void Page_Load(object sender, EventArgs e)
        {
            int index = 1;
            foreach (HttpPostedFile postedFile in Request.Files)
            {
                int contentLength = postedFile.ContentLength;
                string contentType = postedFile.ContentType;
                string fileName = postedFile.FileName;

                postedFile.SaveAs(@"c:\test\file" + index + ".tmp");

                index++;
            } 

        }

I tried uploading a jpg file. Not able to see a saved file. What is going wrong?

A: 

Look into the asp:FileUpload control provided by ASP.NET.

Greco
+1  A: 

You'll need to add id and runat="server" attributes like this:

<input type="file" id="MyFileUpload" runat="server" />

Then, on the server-side you'll have access to the control's PostedFile property, which will give you ContentLength, ContentType, FileName, InputStream properties and a SaveAs method etc:

int contentLength = MyFileUpload.PostedFile.ContentLength;
string contentType = MyFileUpload.PostedFile.ContentType;
string fileName = MyFileUpload.PostedFile.FileName;

MyFileUpload.PostedFile.Save(@"c:\test.tmp");

Alternatively, you could use Request.Files which gives you a collection of all uploaded files:

int index = 1;
foreach (HttpPostedFile postedFile in Request.Files)
{
    int contentLength = postedFile.ContentLength;
    string contentType = postedFile.ContentType;
    string fileName = postedFile.FileName;

    postedFile.Save(@"c:\test" + index + ".tmp");

    index++;
}
LukeH
why runat ="server" ? I donot want a server control. Will this work without a server control?
Ajay
If you don't want to use a server control then you can use `Request.Files`, which will give you a collection containing a `HttpPostedFile` object for each uploaded file.
LukeH
A: 

If you dont want to use the FileUpload control in the toolbox, Give your input an ID then use form[id] to access the input field and cast it to HtmlInputFile.

example here: http://www.codeproject.com/KB/aspnet/fileupload.aspx

Mark Redman
A: 

If you give the input-tag an id and add the runat="server" attribute then you can access it easily.
First change your input tag: <input type="file" id="FileUpload" runat="server" />
Then add the following to your Page_Load method:

if (FileUpload.PostedFile != null) 
{
  FileUpload.PostedFile.SaveAs(@"some path here");
}

This will write your file to a folder of your choice. You can access the PostedFile object if you need to determine the file type or original file name.

Rune Grimstad