Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read inputstream from HTML file type in C# ASP.NET without using ASP.NET server side control

I have the following form

<form id="upload" method="post" EncType="Multipart/Form-Data" action="reciver.aspx">
        <input type="file" id="upload" name="upload" /><br/>
        <input type="submit" id="save" class="button" value="Save" />            
</form>

When I look at the file collection it is empty.

HttpFileCollection Files = HttpContext.Current.Request.Files;

How do I read the uploaded file content without using ASP.NET server side control?

like image 943
Deepfreezed Avatar asked Sep 17 '10 14:09

Deepfreezed


2 Answers

Why do you need to get the currect httpcontext, just use the page's one, look at this example:

//aspx
<form id="form1" runat="server" enctype="multipart/form-data">
 <input type="file" id="myFile" name="myFile" />
 <asp:Button runat="server" ID="btnUpload" OnClick="btnUploadClick" Text="Upload" />
</form>

//c#
protected void btnUploadClick(object sender, EventArgs e)
{
    HttpPostedFile file = Request.Files["myFile"];
    if (file != null && file.ContentLength )
    {
        string fname = Path.GetFileName(file.FileName);
        file.SaveAs(Server.MapPath(Path.Combine("~/App_Data/", fname)));
    }
}

The example code is from Uploading Files in ASP.net without using the FileUpload server control

Btw, you don't need to use a server side button control. You can add the above code to the page load where you check if the current state is a postback.

Good luck!

like image 57
Mouhannad Avatar answered Nov 14 '22 21:11

Mouhannad


Here is my final solution. Attaching the file to an email.

//Get the files submitted form object
            HttpFileCollection Files = HttpContext.Current.Request.Files;

            //Get the first file. There could be multiple if muti upload is supported
            string fileName = Files[0].FileName;

            //Some validation
            if(Files.Count == 1 && Files[0].ContentLength > 1 && !string.IsNullOrEmpty(fileName))
            { 
                //Get the input stream and file name and create the email attachment
                Attachment myAttachment = new Attachment(Files[0].InputStream, fileName);

                //Send email
                MailMessage msg = new MailMessage(new MailAddress("[email protected]", "name"), new MailAddress("[email protected]", "name"));
                msg.Subject = "Test";
                msg.Body = "Test";
                msg.IsBodyHtml = true;
                msg.Attachments.Add(myAttachment);

                SmtpClient client = new SmtpClient("smtp");
                client.Send(msg);
            }
like image 42
Deepfreezed Avatar answered Nov 14 '22 21:11

Deepfreezed