【问题标题】:HTML File Upload in ASP.NET: HttpPostedFile Attributes Are EmptyASP.NET 中的 HTML 文件上传:HttpPostedFile 属性为空
【发布时间】:2012-01-02 07:06:33
【问题描述】:

在我的 ASP.NET Web 表单中,我正在尝试自定义我的文件上传面板。我所做的只是简单地放置一个 HTML 输入按钮和一个文本框。还有一个隐藏的 HTML 文件上传控件。当用户点击按钮时,文件选择窗口出现,当用户选择文件时,值被写入可见文本框。

到目前为止一切都很好。但是我在尝试将所选文件附加到代码页中的电子邮件时遇到问题。

这是 HTML 标记:

<asp:ImageButton ID="clickme" runat="server" ImageUrl="Images/browse.png" OnClientClick="$('#uploadme').click(); return false;" />
<input id="uploadme" name="uploadme" type="file" style="visibility: hidden;" onchange="CopyMe(this, 'txtFileName');" />
<input id="txtFileName" type="text" name="txtFileName" readonly="readonly" class="file-path" />

还有 JS(我使用它只是为了复制文件名并将其写入 txtFileName 以显示给用户):

<script type="text/javascript">
function CopyMe(oFileInput, sTargetID) {
    var arrTemp = oFileInput.value.split('\\');
    document.getElementById(sTargetID).value = arrTemp[arrTemp.length - 1]; 
}

还有 CSS:

input[type=file] { width: 1px; } 

我在我的 .cs 文件中使用以下代码来获取文件属性:

HttpPostedFile file = Request.Files["uploadme"]

但我不断得到空值。因此,经过一番研究,我了解到我的表单必须使用 enctype="multipart/form-data" 属性。由于我的 .aspx 文件位于母版页文件下,因此我将此属性添加到母版页文件的表单中。现在Request.Files["uploadme"] 不为空,但它的文件名是空字符串,它的ContentLength 是0。

我无法理解此问题的根源。如果是因为使用母版页的表单,我无法将表单添加到我的子页面,因为它说一个页面只能有一个表单。我不知道是否可以使用 JavaScript 进行上传,因为我需要在上传后通过电子邮件发送文件,所以我不知道通过 JS 上传后如何获取文件。

我该如何解决这个问题?这可能是一种或另一种方式,我所需要的只是一个风格化的上传面板,并在上传后通过电子邮件发送文件。

【问题讨论】:

    标签: asp.net html file-upload


    【解决方案1】:

    您使用的是母版页,我假设您使用的是 .net 2.0 或更高版本。如果是这种情况,请使用 FileUpload 控件(您仍然可以使用 CSS 将其隐藏)。使用 FileUpload 控件意味着您将不需要 enctype 属性(尽管在那里您不应该产生任何问题)。

    说了这么多,我不相信您将值复制到文件类型字段并上传文件。这将是一个重大的安全漏洞,因为网站可能会在您不知情的情况下从您的计算机上传文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2020-12-12
      • 2017-12-30
      • 1970-01-01
      • 2018-05-16
      相关资源
      最近更新 更多