cch*_*hap 32 javascript php file-upload filesize image-uploading
我正在使用我从这里获得的这个javascript,它完全符合我的需要.
var _validFileExtensions = [".jpg", ".jpeg"];
function File_Validator(theForm){
var arrInputs = theForm.getElementsByTagName("input");
for (var i = 0; i < arrInputs.length; i++) {
var oInput = arrInputs[i];
if (oInput.type == "file") {
var sFileName = oInput.value;
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("Invalid image file type!");
return false;
}
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想知道,在按下提交/上传按钮之前,我是否可以检查文件大小并在文件大于500kb时失败 - > all?
编辑
在查看PHPMyCoder建议的内容后,我最终使用此javascript代码进行求解:
<script language='JavaScript'>
function checkFileSize(inputFile) {
var max = 3 * 512 * 512; // 786MB
if (inputFile.files && inputFile.files[0].size > max) {
alert("File too large."); // Do your thing to handle the error.
inputFile.value = null; // Clear the field.
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
这将检查文件大小,并在提交表单之前提醒用户.
Bai*_*ker 52
在现代浏览器上(FF> = 3.6,Chrome> = 19.0,Opera> = 12.0,Safari上有错误),您可以使用HTML5文件API.当文件输入的值发生更改时,此API将允许您检查文件大小是否符合您的要求.当然,这个以及MAX_FILE_SIZE
可以被篡改,所以总是使用服务器端验证.
<form method="post" enctype="multipart/form-data" action="upload.php">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
<script>
document.forms[0].addEventListener('submit', function( evt ) {
var file = document.getElementById('file').files[0];
if(file && file.size < 10485760) { // 10 MB (this size is in bytes)
//Submit form
} else {
//Prevent default and display error
evt.preventDefault();
}
}, false);
</script>
Run Code Online (Sandbox Code Playgroud)
在服务器端,不可能停止从PHP发生上传,因为一旦调用了PHP,上传就已经完成了.如果您尝试节省带宽,则可以使用ini设置拒绝来自服务器端的上载upload_max_filesize
.这样做的问题是这适用于所有上传,因此您必须选择适用于所有上传的自由主义内容.MAX_FILE_SIZE
其他答案中已讨论过使用.我建议阅读手册.要知道它和其他任何客户端(包括javascript检查)都可以被篡改,所以你应该总是有服务器端(PHP)验证.
在服务器端,您应该验证文件是否在大小限制范围内(因为除了INI设置之外的所有内容都可能被篡改).您可以使用该$_FILES
数组来查找上载大小.(关于内容的文档$_FILES
可以在MAX_FILE_SIZE
文档下面找到)
upload.php的
<?php
if(isset($_FILES['file']) {
if($_FILES['file']['size'] > 10485760) { //10 MB (size is also in bytes)
// File too big
} else {
// File within size restrictions
}
}
Run Code Online (Sandbox Code Playgroud)
Fir*_*rze 10
我创建了一个jQuery版本的PhpMyCoder的答案:
$('form').submit(function( e ) {
if(!($('#file')[0].files[0].size < 10485760 && get_extension($('#file').val()) == 'jpg')) { // 10 MB (this size is in bytes)
//Prevent default and display error
alert("File is wrong type or over 10Mb in size!");
e.preventDefault();
}
});
function get_extension(filename) {
return filename.split('.').pop().toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)