我正在使用<input type="file" id="fileUpload" runat="server">
在 ASP.NET 应用程序中上传文件。我想限制上传的文件类型(例如:限制为 .xls 或 .xlsx 文件扩展名)。
JavaScript 或服务器端验证都可以(只要在上传文件之前进行服务器端验证 - 可能上传了一些非常大的文件,因此需要在上传实际文件之前进行任何验证) .
我正在使用<input type="file" id="fileUpload" runat="server">
在 ASP.NET 应用程序中上传文件。我想限制上传的文件类型(例如:限制为 .xls 或 .xlsx 文件扩展名)。
JavaScript 或服务器端验证都可以(只要在上传文件之前进行服务器端验证 - 可能上传了一些非常大的文件,因此需要在上传实际文件之前进行任何验证) .
似乎您的选择有限,因为您希望在上传之前进行检查。我认为最好的方法是使用 javascript 来验证文件的扩展名。您可以构建有效扩展名的散列,然后查看正在上传的文件的扩展名是否存在于散列中。
HTML:
<input type="file" name="FILENAME" size="20" onchange="check_extension(this.value,"upload");"/>
<input type="submit" id="upload" name="upload" value="Attach" disabled="disabled" />
Javascript:
var hash = {
'xls' : 1,
'xlsx' : 1,
};
function check_extension(filename,submitId) {
var re = /\..+$/;
var ext = filename.match(re);
var submitEl = document.getElementById(submitId);
if (hash[ext]) {
submitEl.disabled = false;
return true;
} else {
alert("Invalid filename, please select another file");
submitEl.disabled = true;
return false;
}
}
使用正则表达式验证器非常简单。
<asp:RegularExpressionValidator
id="RegularExpressionValidator1"
runat="server"
ErrorMessage="Only zip file is allowed!"
ValidationExpression ="^.+(.zip|.ZIP)$"
ControlToValidate="FileUpload1"
> </asp:RegularExpressionValidator>
从 javascript 中,您应该能够在 onsubmit 处理程序中获取文件名。因此,在您的情况下,您应该执行以下操作:
<form onsubmit="if (document.getElementById('fileUpload').value.match(/xls$/) || document.getElementById('fileUpload').value.match(/xlsx$/)) { alert ('Bad file type') ; return false; } else { return true; }">...</form>
我同意 Chris 的观点,检查扩展名并不是对文件类型的任何验证。Telerik 的 radUpload可能是您最好的选择,它提供了上传文件的 ContentType 属性,您可以将其与已知的 mime 类型进行比较。您应该检查:
应用程序/vnd.ms-excel,
应用程序/excel,
应用程序/x-msexcel
对于新的 2k7 格式:
应用程序/vnd.openxmlformatsofficedocument.spreadsheetml.sheet
Telerik 曾经将 radUpload 作为一个单独的组件出售,但现在它被包裹在控件套件中,这使得它有点贵,但到目前为止它是检查真实类型的最简单方法
您可以在上传控件上使用正则表达式验证器:
<asp:RegularExpressionValidator id="FileUpLoadValidator" runat="server" ErrorMessage="Upload Excel files only." ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.xls|.XLS|.xlsx|.XLSX)$" ControlToValidate="fileUpload"> </asp:RegularExpressionValidator>
还有输入标签的accept属性:
<input type="file" accept="application/msexcel" id="fileUpload" runat="server">
但是当我尝试这个时并没有取得太大的成功(使用 FF3 和 IE7)