当前位置: 首页 > 面试题库 >

上传文件前验证文件扩展名

蓬野
2023-03-14
问题内容

我正在将图像上传到servlet。通过检查文件头中的幻数,仅在服务器端验证上传的文件是否为图像。在将表单提交给Servlet之前,有什么方法可以在客户端验证扩展?我一按回车就开始上传。

我在客户端使用Javascript和jQuery。

更新: 我最终通过服务器端验证结束了工作,该验证读取字节,如果不是图像,则拒绝上传。


问题答案:

可以仅检查文件扩展名,但是用户可以轻松地将virus.exe重命名为virus.jpg并“通过”验证。

值得一试的是,以下代码检查文件扩展名,如果不符合有效扩展名之一,则中止该代码:(选择无效文件,然后尝试提交以查看运行中的警报)

var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];

function Validate(oForm) {

    var arrInputs = oForm.getElementsByTagName("input");

    for (var i = 0; i < arrInputs.length; i++) {

        var oInput = arrInputs[i];

        if (oInput.type == "file") {

            var sFileName = oInput.value;

            if (sFileName.length > 0) {

                var blnValid = false;

                for (var j = 0; j < _validFileExtensions.length; j++) {

                    var sCurExtension = _validFileExtensions[j];

                    if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {

                        blnValid = true;

                        break;

                    }

                }



                if (!blnValid) {

                    alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));

                    return false;

                }

            }

        }

    }



    return true;

}


<form onsubmit="return Validate(this);">

  File: <input type="file" name="my file" /><br />

  <input type="submit" value="Submit" />

</form>

请注意,该代码将允许用户发送而不选择文件…如果需要,请删除该行if (sFileName.length > 0) {及其关联的右括号。该代码将验证表单中的任何文件输入,无论其名称如何。

jQuery可以用更少的行数完成,但是我对“原始” JavaScript足够满意,最终结果是相同的。

如果您有更多文件,或者想要在更改文件时触发检查,而不仅仅是在表单提交中,请使用以下代码:

var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];

function ValidateSingleInput(oInput) {

    if (oInput.type == "file") {

        var sFileName = oInput.value;

         if (sFileName.length > 0) {

            var blnValid = false;

            for (var j = 0; j < _validFileExtensions.length; j++) {

                var sCurExtension = _validFileExtensions[j];

                if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {

                    blnValid = true;

                    break;

                }

            }



            if (!blnValid) {

                alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));

                oInput.value = "";

                return false;

            }

        }

    }

    return true;

}


File 1: <input type="file" name="file1" onchange="ValidateSingleInput(this);" /><br />

File 2: <input type="file" name="file2" onchange="ValidateSingleInput(this);" /><br />

File 3: <input type="file" name="file3" onchange="ValidateSingleInput(this);" /><br />

如果文件扩展名无效,它将显示警报并重置输入。



 类似资料:
  • 问题内容: 当我尝试处理文件上传时,是否应该基于文件MIME类型或文件扩展名运行验证? 这两种文件验证方式的优缺点是什么? 而且,我应该关注其他任何安全问题吗? 这些天来,我一直依靠MIME类型,但是这篇文章中投票最多的答案是 PHP中的文件上传问题说: 永远不要依赖浏览器提交的MIME类型! 问题答案: 好的,对于这里的所有热心人士,我都在讲一些关于“螺丝扩展,检查MIME!FILEINFO R

  • 问题内容: 我有一个可以让人们上传文件的应用程序,表示为。但是,我要确保用户仅上传xml文件。我知道我可以使用进行此操作,但是我不知道将检查放在何处-据我所知,clean由于文件在clean运行时尚未上传,因此无法将其放在函数中。 这是模型: 问题答案: 对于后代:解决方案是使用read方法并将其传递给。

  • 问题内容: 我用来在ASP.NET应用程序中上传文件。我想限制上传的文件类型(例如:限制为.xls或.xlsx文件扩展名)。 JavaScript或服务器端验证都可以(只要服务器端验证将在文件上传之前进行-可能会上传一些非常大的文件,因此任何验证都需要在实际文件上传之前进行) 。 问题答案: 似乎您选择的选项有限,因为您希望在上传之前进行检查。我认为最好的方法是使用JavaScript来验证文件的

  • 问题内容: 在使用JavaScript上传 文件 之前,有什么方法可以检查 文件大小 吗? 问题答案: 是的 ,有些现代浏览器支持W3C的一项新功能[FileAPI。可以将其用于此目的,并且很容易测试它是否受支持,如果不支持,则可以回退到其他机制(如果需要)。 这是一个完整的示例: 而这里是它的行为。尝试使用最新版本的Chrome或Firefox。 稍微偏离主题,但是:请注意,客户端验证不能替代服

  • 问题内容: 我需要2个文本字段和1个文件上传。当我只需要文本字段时,一切都正常,但是当我需要文件上传时,即使我选择了一个文件,验证错误仍然会提示需要文件。有人知道我在做什么错吗?提前谢谢了。 //视图 //控制器 问题答案: 我找到了一种完全符合我想要的解决方案。 我变了 至