在我的ASP.NET网络表单中,我正在尝试自定义“文件上载”面板。我所做的只是放一个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"]
不为null,但其文件名为空字符串,其ContentLength为0.
我无法理解这个问题可能是什么来源。如果是因为使用母版页的表单,我无法将表单添加到我的子页面,因为它表示页面只能有一个表单。我不知道是否可以使用JavaScript进行上传,因为我需要在上传后通过电子邮件发送文件,所以我不知道如何通过JS上传后获取文件。
我该如何解决这个问题?它可能是这样或那样,我需要的是一个程式化的上传面板和上传后的电子邮件文件。
答案 0 :(得分:0)
您正在使用母版页,我假设您使用的是.net 2.0或更高版本。如果是这种情况,请使用FileUpload控件(您仍然可以使用CSS隐藏它)。使用FileUpload控件意味着您不需要enctype属性(尽管您不应该在其中产生任何问题)。
总而言之,我不相信您将值复制到文件类型字段并上传文档。这将是一个主要的安全漏洞,因为网站可能会在您不知情的情况下从您的计算机上传文件。