【问题标题】:How do I upload a file from a dynamically created FileUpload control with ASP.NET?如何使用 ASP.NET 从动态创建的 FileUpload 控件上传文件?
【发布时间】:2010-09-27 09:25:50
【问题描述】:

在下面附加的代码中,我试图通过 ASP.NET 上传文件。我正在动态创建 FileUpload 控件,这意味着它不在我的 ViewState 中,这(我认为)意味着我不能使用该控件来上传文件,除非我使用我不想使用的老式 multipat/form-data 方式做。我需要能够允许用户创建多个 FileUpload 字段,然后当他们单击 Upload File(s) 按钮时,它会遍历所有 FileUpload 字段并将它们上传到服务器。

我确信有一种方法可以做到这一点,我只是没有想到 - TIA!

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim fup As New FileUpload()
        fup.ID = "FileUpload1"

        PlaceHolder1.Controls.Add(fup)
    End Sub

    Protected Sub btnUploadFile_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        ' HOW DO I GET THE FILE THAT WAS SELECTED IN THE DYNAMICALLY CREATE FILEUPLOAD CONTROL?
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div style="padding:13px">
        <asp:Button ID="btnAdd" runat="server" Text="Add FileUpload Control" OnClick="btnAdd_Click" />
        <br /><br />
        <asp:PlaceHolder ID="PlaceHolder1" runat="server" />
        <br /><br />
        <asp:Button ID="btnUploadFile" runat="server" Text="Upload File(s)" OnClick="btnUploadFile_Click" />
    </div>
    </form>
</body>
</html>

【问题讨论】:

    标签: dynamic file-upload viewstate


    【解决方案1】:

    你可以使用 Request.Files

    它包含上传的文件作为 HttpPostedFile 对象。

    foreach(HttpPostedFile file in Request.Files)
      file.SaveAs(...);
    

    【讨论】:

      【解决方案2】:

      问题在于 FileUpload 控件已锁定 FileName 参数,无法以编程方式设置。这样做的原因是为了保护用户免受某些恶意脚本的影响,该脚本决定将系统文件上传到服务器而不是用户想要的。

      在上述情况下,您将无法使用 FileUpload 控件,您需要寻找替代方法。

      【讨论】:

        【解决方案3】:

        这里是上面的一个更长的版本:C#

        print("HttpFileCollection UploadedFiles = Request.Files;
          HttpPostedFile UserPostedFile;
          int UploadFileCount = UploadedFiles.Count;
          if (UploadFileCount >= 1)
          {
            for (int i = 0; i < UploadFileCount; ++i)
            {
              UserPostedFile = UploadedFiles[i];
              UserPostedFile.SaveAs(UserPostedFile.FileName);
            }
          }");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-09
          • 2017-07-22
          • 1970-01-01
          • 1970-01-01
          • 2013-01-09
          • 2010-10-22
          • 2016-04-01
          • 2011-03-08
          相关资源
          最近更新 更多