如何正确使用 ASP.NET FileUpload 控件

Posted

技术标签:

【中文标题】如何正确使用 ASP.NET FileUpload 控件【英文标题】:How to correctly use the ASP.NET FileUpload control 【发布时间】:2011-01-15 12:58:07 【问题描述】:

我正在尝试在 ASP.NET 中使用 FileUpload 控件

这是我当前的命名空间设置:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

在我的课堂上,我只是在使用:

FileUpload fileUpload = new FileUpload();

但是,通常作为 FileUpload 一部分的属性似乎都不可用...例如 .HasFile。我正在尝试在后面的代码中制作 Button click 方法,我注意到 .HasFile 的大部分用法都在前面的代码中,但据我了解,这应该无关紧要。

有人知道为什么吗?

【问题讨论】:

【参考方案1】:

ASP.NET 控件应该放在 aspx 标记文件中。这是与他们合作的首选方式。因此,将FileUpload 控件添加到您的页面。确保它具有所有必需的属性,包括 IDrunat

<asp:FileUpload ID="FileUpload1" runat="server" />

FileUpload1 的实例将在自动生成/更新的 *.designer.cs 文件中自动创建,该文件是您页面的部分类。您通常不必关心其中的内容,只需假设 aspx 页面上的任何控件都是自动实例化的。

添加一个回发按钮:

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

然后转到您有代码的 *.aspx.cs 文件并添加按钮单击处理程序。在 C# 中它看起来像这样:

protected void Button1_Click(object sender, EventArgs e)

  if (this.FileUpload1.HasFile)
  
    this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName);
  

就是这样。一切都应该按预期工作。

【讨论】:

【参考方案2】:

不要在您的代码隐藏文件中实例化FileUpload,只需在您的标记文件(.aspx 文件)中声明它:

<asp:FileUpload ID="fileUpload" runat="server" />

然后你就可以访问控件的所有属性了,比如HasFile

【讨论】:

【参考方案3】:

从后面的代码添加 FileUpload 控件应该可以正常工作,其中 HasFile 属性应该可用(例如在您的 Click 事件中)。

如果属性似乎不可用(作为编译器错误或通过智能感知),您可能引用的变量与您认为的不同。

【讨论】:

【参考方案4】:

我在代码后面的解决方案是:

System.Web.UI.WebControls.FileUpload fileUpload;

我不知道为什么,但是当您在没有 System.Web.UI.WebControls 的情况下使用 FileUpload 时,它引用的是 YourProject.FileUpload 而不是 System .Web.UI.WebControls.FileUpload.

【讨论】:

【参考方案5】:

我注意到,当智能不适用于对象时,通常在您正在处理的类中的某处出现错误。

另一个选项是您没有将 FileUpload 对象实例化为实例变量。确保代码:

FileUpload fileUpload = new FileUpload();

不在你代码后面的函数内。

【讨论】:

【参考方案6】:

老问题,但如果它可能对某人有帮助,这里是完整的示例

<form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" /><br/>
        <asp:Button ID="Button1" runat="server" Text="Upload File" OnClick="UploadFile" /><br/>
        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>
</form>

在您的代码隐藏中,C# 代码抓取文件并将其保存在目录中

protected void UploadFile(object sender, EventArgs e)
    
        //folder path to save uploaded file
        string folderPath = Server.MapPath("~/Upload/");

        //Check whether Directory (Folder) exists, although we have created, if it si not created this code will check
        if (!Directory.Exists(folderPath))
        
            //If folder does not exists. Create it.
            Directory.CreateDirectory(folderPath);
        

       //save file in the specified folder and path
        FileUpload1.SaveAs(folderPath + Path.GetFileName(FileUpload1.FileName));

        //once file is uploaded show message to user in label control
        Label1.Text = Path.GetFileName(FileUpload1.FileName) + " has been uploaded.";
    

来源:File Upload in ASP.NET (Web-Forms Upload control example)

【讨论】:

以上是关于如何正确使用 ASP.NET FileUpload 控件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FileUpload Interface (GUI) 将文件保存到 asp.net 中的选定位置?

在 ASP.net 中上传文件而不使用 FileUpload 服务器控件

ASP.Net如何用FileUpLoad实现多文件上传

使用参数登录 asp.net 重定向

ASP.NET+C# FILEUPLOAD控件,如何上传图片到服务器并保存图片路径到数据库?

ASP.NET点击提交按钮时弹出一个消息框,但是不想把fileupload控件的路径清空改怎么办?