我目前在验证用户上传到文件输入中的文件名时遇到问题。我已经对文件扩展名进行了验证,但是当用户尝试上传文件名示例1.hello.jpg
时,对于我的JavaScript验证代码,它看起来没问题,因为它是jpg
扩展名。但是在我的PHP部分中,我对文件扩展名的验证无法识别它,因为我使用explode函数来验证文件扩展名。
在提交到我的服务器端之前,有没有在客户端验证文件的特殊字符?感谢
以下是我在客户端的验证:
<script type='text/javascript'>
function checkDisabled(yourSubmitButton){
//No 1 file input validation
var res_field = document.getElementById('uploaded_file').value;
var extension = res_field.substr(res_field.lastIndexOf('.') + 1).toLowerCase();
var allowedExtensions = ['jpg','JPG','bmp','BMP','png','PNG','jpeg','JPEG'];
if(document.getElementById('bannerName').value.length !=0){
//File input extension validation
if (res_field.length > 0)
{
if (allowedExtensions.indexOf(extension) !== -1)
{
yourSubmitButton.disabled = false;
return;
}
}
}
// If we have made it here, disable it
yourSubmitButton.disabled = true;
};
</script>
以下是我验证扩展程序的PHP代码:
$valid_formats = array("jpg", "JPEG","png","PNG","bmp","BMP",'JPG','jpeg');
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
{
$name = $_FILES['uploaded_file']['name'];
$size = $_FILES['uploaded_file']['size'];
$bName = $_POST['bannerName'];
$bDescription = $_POST['bannerDescription'];
$bK = $_POST['bannerK'];
$bKe = $_POST['bannerKe'];
$bS= $_POST['bannerS'];
if(strlen($name))
{
list($txt, $ext) = explode(".", $name);
if(in_array($ext,$valid_formats))
{
...........
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
尝试访问以下值
$_FILES["uploaded_file"]["type"]
并在服务器端验证。
答案 2 :(得分:0)
我在javascript上使用split函数解决了这个问题。
这是我的代码:
//Check for dot that is not more than 1
var checkStr = 0;
var str = document.getElementById('uploaded_file').value;
var res = str.split(".");
for(var i = 0 ; i <= res.length;i++){
checkStr++;
}
if(checkStr>3){
alert(str+' invalid filename detected. \n\n Please rename your file.');
return false;
}
对于像我这样的初学者可以参考,因为我试图将浏览器的文件名分成文件输入。如果split函数后的数组大于3,则提示输出错误。
示例:
感谢所有帮助。非常感谢