如何验证文件上载的文件类型?

Yaa*_*lis 36 javascript asp.net validation upload file

<input type="file" id="fileUpload" runat="server">用来在ASP.NET应用程序中上传文件.我想限制上传的文件类型(例如:限制为.xls或.xlsx文件扩展名).

JavaScript或服务器端验证都可以(只要服务器端验证将在文件上传之前进行 - 可能会上传一些非常大的文件,因此需要在上载实际文件之前进行任何验证) .

小智 30

似乎您将拥有有限的选项,因为您希望在上传之前进行检查.我认为你将获得的最好的是使用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" />
Run Code Online (Sandbox Code Playgroud)

使用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;
      }
}
Run Code Online (Sandbox Code Playgroud)

  • 别忘了,这只是客户端验证.我仍然可以"手动"HTTP-POST到表单URL以绕过此检查 - 您还需要进行服务器端验证检查. (12认同)
  • 我在上面使用但得到了文件的扩展名:'var ext = value.slice(value.lastIndexOf(".")).toLowerCase();' (5认同)
  • 当文件名包含extra.时,这将返回false,例如my.file.doc (2认同)

sha*_*esh 26

使用regularre表达式验证器非常简单.

<asp:RegularExpressionValidator
id="RegularExpressionValidator1"
runat="server"
ErrorMessage="Only zip file is allowed!"
ValidationExpression ="^.+(.zip|.ZIP)$"
ControlToValidate="FileUpload1"
> </asp:RegularExpressionValidator>
Run Code Online (Sandbox Code Playgroud)

客户端验证允许上载的文件类型


sta*_*ace 6

从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>
Run Code Online (Sandbox Code Playgroud)


kd7*_*kd7 6

我同意Chris的意见,检查扩展名是不是以任何方式验证文件类型.Telerik的radUpload可能是您的最佳选择,它提供了正在上传的文件的ContentType属性,您可以将其与已知的mime类型进行比较.你应该检查:

应用/ vnd.ms-Excel中,

应用程序/ Excel中,

应用程序/ x-msexcel的

对于新的2k7格式:

应用程序/ vnd.openxmlformatsofficedocument.spreadsheetml.sheet

Telerik曾经将radUpload作为一个单独的组件出售,但现在它被包装到控件套件中,这使得它更贵一点,但到目前为止它是检查真实类型的最简单方法