6

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?

0

5 Answers 5

8

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++;
}
Sign up to request clarification or add additional context in comments.

4 Comments

why runat ="server" ? I donot want a server control. Will this work without a server control?
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.
Thank you so much @LukeH...You got me out of trouble...:)
what if my method is static, i m unable to use that than.?
2

I think the name tag is required on the file input:

<input type="file" name="file" />

Without this, I don’t get anything back.


Further problems that I had which might be specific to my machine:

I get a

Unable to cast object of type 'System.String' to type 'System.Web.HttpPostedFile'.

error at the line

foreach (HttpPostedFile postedFile in Request.Files)

so my final code looks like this:

for (var i = 0; i < Request.Files.Count; i++)
{
    var postedFile = Request.Files[i]; 

    // do something with file here
}

Comments

0

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

Comments

0

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

Comments

0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.