【问题标题】:Using "<input type="file" .... />" instead of asp:FileUpload使用 "<input type="file" .... />" 代替 asp:FileUpload
【发布时间】:2013-04-19 12:31:43
【问题描述】:

我正在修改现有的 ASP.NET 项目。原作者错误地尝试通过将其可见性设置为隐藏并仅创建两个自定义样式的浏览和保存按钮来创建样式化的 asp:FileUpload。

出于安全原因,IE 不允许这样做。我的策略是尝试使用 type="file" 的输入标签,例如this example。因此,如果我设置像&lt;input type="file" ID="inputFile" /&gt; 这样的输入,我如何在我的代码后面访问/保存文件inputFile.SaveAs("someFile.txt");?另外(在后面的代码中)我可以做类似inputFile.HasFile 的事情吗?或者还有其他类似的吗?

根据建议,我正在尝试以下方法:

             <td>
                Enabled: <asp:CheckBox ID="CheckBox2" runat="server" />    &nbsp;&nbsp;
                <div id="testFileUploader">>
                   <input type="file" id="browserHidden" runat="server" />
                   <div id="browserVisible"><input type="text" id="fileField" /></div>
                </div>
             </td>

【问题讨论】:

  • 只需添加一个 runat="server" 到它。
  • 啊,是的,我忘了包括这个。谢谢。在后面的代码中访问它怎么样?.SaveAs().HasFileinputFile 对象上工作?
  • 包含在我的回答中。 :)
  • @kmarks2 你不需要在任何地方为纯 HTML 表单元素设置 runat="server",对于 asp: 元素需要设置 always runat,对于纯 HTML,只需设置一次 runat主窗体,然后您将能够从请求中获取任何普通 html 对象的 html 资源,掠夺我的答案。
  • @kmarks2 请不要忘记点击接受图标标记有用的答案

标签: c# asp.net html file-upload


【解决方案1】:

向对象添加一个 runat="server"。这样它就可以像任何 asp:FileUpload 控件一样在 CodeBehid 上工作。

【讨论】:

  • 我已经编辑了我的原始帖子以反映这样做。但是现在我无法构建,因为我尝试做的所有事情都会出错 browserHidden.HasFilebrowserHidden.SaveAs("someFile.txt") 等。确实,当我键入browser. 时,似乎没有任何东西出现在 Intellisence 中,似乎让我保存了文件。如何在输入对象上执行此操作?
【解决方案2】:
if(fileUrunResim.HasFile)
    fileUrunResim.SaveAs(MapPath("~/Images/" + fileUrunResim.FileName));


**if you unique filename,**

string extension = Path.GetExtension(fileUrunResim.FileName);

string fileName = Guid.NewGuid().ToString().Substring(0, 25) + extension ;


if(fileUrunResim.HasFile)
    fileUrunResim.SaveAs(MapPath("~/Images/" + filename ));

【讨论】:

    【解决方案3】:

    正如评论,您可以将 runat="server" 添加到您的输入文件标签中。

    另一方面,已经有一篇关于您要求的类似帖子。看看这个:

    Uploading Files in ASP.net without using the FileUpload server control

    希望有帮助

    干杯!

    【讨论】:

      【解决方案4】:

      因此,您可以根据 ASPX 页面的CodeBehind 处的GUID 生成一个随机文件名,供以后上传:

      HttpPostedFile filePosted = Request.Files["uploadFieldNameFromHTML"];
      
      if (filePosted != null && filePosted.ContentLength > 0)
      {
          string fileNameApplication = System.IO.Path.GetFileName(filePosted.FileName);
          string fileExtensionApplication = System.IO.Path.GetExtension(fileNameApplication);
      
          // generating a random guid for a new file at server for the uploaded file
          string newFile = Guid.NewGuid().ToString() + fileExtensionApplication;
          // getting a valid server path to save
          string filePath = System.IO.Path.Combine(Server.MapPath("uploads"), newFile);
      
          if (fileNameApplication != String.Empty)
          {
              filePosted.SaveAs(filePath);
          }
      }
      

      Request.Files["uploadFieldNameFromHTML"] 在此处设置 HTML 代码中的 ID:

      <input type='file' id='...' />
      

      另外,不要忘记在ASPX页面的主窗体中定义runat="server",最好在主窗体中设置,不要忘记&lt;form&gt;enctype="multipart/form-data"参数:

      <body>
          <form enctype="multipart/form-data" id="form1" runat="server">
              <input type='file' id='uploadFieldNameFromHTML' />
      ...
      

      【讨论】:

        猜你喜欢
        • 2011-01-09
        • 2010-11-05
        • 2011-10-01
        • 2017-12-04
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        • 2017-11-26
        • 2013-12-07
        相关资源
        最近更新 更多