代码之家  ›  专栏  ›  技术社区  ›  Deepfreezed

如何在不使用ASP.NET服务器端控件的情况下从C ASP.NET中的HTML文件类型读取输入流

  •  6
  • Deepfreezed  · 技术社区  · 14 年前

    我有以下表格

    <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>
    

    当我查看文件集合时,它是空的。

    HttpFileCollection Files = HttpContext.Current.Request.Files;
    

    如何在不使用ASP.NET服务器端控件的情况下读取上载的文件内容?

    2 回复  |  直到 7 年前
        1
  •  6
  •   Community CDub    8 年前

    为什么您需要获取当前的httpContext,只需使用页面的一个,看看这个例子:

    //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)));
        }
    }
    

    示例代码来自 Uploading Files in ASP.net without using the FileUpload server control

    顺便说一句,您不需要使用服务器端按钮控件。您可以将上述代码添加到页面加载中,检查当前状态是否为回发。

    祝你好运!

        2
  •  0
  •   Deepfreezed    14 年前

    这是我的最终解决方案。将文件附加到电子邮件。

    //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("emailaddress@emailaddress.com", "name"), new MailAddress("emailaddress@emailaddress.com", "name"));
                    msg.Subject = "Test";
                    msg.Body = "Test";
                    msg.IsBodyHtml = true;
                    msg.Attachments.Add(myAttachment);
    
                    SmtpClient client = new SmtpClient("smtp");
                    client.Send(msg);
                }