在使用JavaScript上傳文件之前,有任何方法可以檢查文件大小嗎?JavaScript文件上傳大小驗證
回答
是,W3C有一項新功能,它受到一些現代瀏覽器File API的支持。它可以用於此目的,並且很容易測試它是否受支持,如果不是,則會退回到其他機制(如果需要)。
這裏有一個完整的例子:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Show File Data</title>
<style type='text/css'>
body {
font-family: sans-serif;
}
</style>
<script type='text/javascript'>
function showFileSize() {
var input, file;
// (Can't use `typeof FileReader === "function"` because apparently
// it comes back as "object" on some browsers. So just see if it's there
// at all.)
if (!window.FileReader) {
bodyAppend("p", "The file API isn't supported on this browser yet.");
return;
}
input = document.getElementById('fileinput');
if (!input) {
bodyAppend("p", "Um, couldn't find the fileinput element.");
}
else if (!input.files) {
bodyAppend("p", "This browser doesn't seem to support the `files` property of file inputs.");
}
else if (!input.files[0]) {
bodyAppend("p", "Please select a file before clicking 'Load'");
}
else {
file = input.files[0];
bodyAppend("p", "File " + file.name + " is " + file.size + " bytes in size");
}
}
function bodyAppend(tagName, innerHTML) {
var elm;
elm = document.createElement(tagName);
elm.innerHTML = innerHTML;
document.body.appendChild(elm);
}
</script>
</head>
<body>
<form action='#' onsubmit="return false;">
<input type='file' id='fileinput'>
<input type='button' id='btnLoad' value='Load' onclick='showFileSize();'>
</form>
</body>
</html>
而且here它是在行動。嘗試使用最新版本的Chrome或Firefox。
稍微偏離主題,但:請注意,客戶端驗證服務器端驗證無可替代。客戶端驗證純粹是爲了提供更好的用戶體驗。例如,如果您不允許上傳超過5MB的文件,則可以使用客戶端驗證來檢查用戶選擇的文件大小不超過5MB,並且如果它是(所以他們不會花費所有時間上傳,只是爲了得到在服務器上扔掉的結果),但是您必須也強制在服務器上的限制,因爲所有客戶端限制(和其他驗證)可以繞過。
否
是的,在較新的瀏覽器中使用File API。詳情請參閱TJ的回答。
如果您還需要支持較舊的瀏覽器,則必須使用基於Flash的上傳程序(如SWFUpload或Uploadify)來執行此操作。
SWFUpload Features Demo顯示file_size_limit
設置如何工作。
請注意,這(顯然)需要Flash,加上其工作方式與普通上傳表單有點不同。
你可以試試這個fineuploader
它IE6(和avove),Chrome或Firefox
Fine Uploader無法在IE9及更舊版本中驗證文件大小,因爲不支持File API。 IE10是第一個支持File API的Internet Explorer版本。 – 2012-11-17 18:09:55
下工作正常使用jQuery:
<form action="upload" enctype="multipart/form-data" method="post">
Upload image:
<input id="image-file" type="file" name="file" />
<input type="submit" value="Upload" />
<script type="text/javascript">
$('#image-file').bind('change', function() {
alert('This file size is: ' + this.files[0].size/1024/1024 + "MB");
});
</script>
</form>
如果你使用jQuery驗證,你可以寫這樣的事情:
$.validator.addMethod(
"maxfilesize",
function (value, element) {
if (this.optional(element) || ! element.files || ! element.files[0]) {
return true;
} else {
return element.files[0].size <= 1024 * 1024 * 2;
}
},
'The file size can not exceed 2MB.'
);
我使用一個主要的Javascript函數我在Mozilla開發人員網絡站點https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications找到,以及與AJAX的另一個功能,並根據我的需要進行更改。它接收一個關於我的html代碼中我想寫文件大小的位置的文檔元素id。
<Javascript>
function updateSize(elementId) {
var nBytes = 0,
oFiles = document.getElementById(elementId).files,
nFiles = oFiles.length;
for (var nFileId = 0; nFileId < nFiles; nFileId++) {
nBytes += oFiles[nFileId].size;
}
var sOutput = nBytes + " bytes";
// optional code for multiples approximation
for (var aMultiples = ["K", "M", "G", "T", "P", "E", "Z", "Y"], nMultiple = 0, nApprox = nBytes/1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
sOutput = " (" + nApprox.toFixed(3) + aMultiples[nMultiple] + ")";
}
return sOutput;
}
</Javascript>
<HTML>
<input type="file" id="inputFileUpload" onchange="uploadFuncWithAJAX(this.value);" size="25">
</HTML>
<Javascript with XMLHttpRequest>
document.getElementById('spanFileSizeText').innerHTML=updateSize("inputFileUpload");
</XMLHttpRequest>
乾杯
如果IE的「文件模式」設置爲「標準」您可以使用簡單的JavaScript「大小」的方法來獲得上傳文件的大小。
設置IE的 '文件模式' 到 '標準':
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
比,使用 '尺寸' JavaScript方法來獲取上傳的文件大小:
<script type="text/javascript">
var uploadedFile = document.getElementById('imageUpload');
var fileSize = uploadedFile.files[0].size;
alert(fileSize);
</script>
這對我的作品。
無論您添加哪個元標記,這都不適用於IE9或更高版本。 – 2013-07-31 14:27:02
這很簡單。
var oFile = document.getElementById("fileUpload").files[0]; // <input type="file" id="fileUpload" accept=".jpg,.png,.gif,.jpeg"/>
if (oFile.size > 2097152) // 2 mb for bytes.
{
alert("File size must under 2mb!");
return;
}
即使問題得到解答,我想發佈我的答案。可能對未來的觀衆來說很方便。您可以像下面的代碼一樣使用它。
<input type="file" id="fileinput" />
<script type="text/javascript">
function readSingleFile(evt) {
//Retrieve the first (and only!) File from the FileList object
var f = evt.target.files[0];
if (f) {
var r = new FileReader();
r.onload = function(e) {
var contents = e.target.result;
alert("Got the file.n"
+"name: " + f.name + "n"
+"type: " + f.type + "n"
+"size: " + f.size + " bytesn"
+ "starts with: " + contents.substr(1, contents.indexOf("n"))
);
if(f.size > 5242880) {
alert('File size Greater then 5MB!');
}
}
r.readAsText(f);
} else {
alert("Failed to load file");
}
}
Works的動態和靜態文件元素(文件大小的方法是非標準功能,並且自壁虎7.0棄用。)
的Javascript唯一的解決辦法
function ValidateSize(file) {
var FileSize = file.files[0].size/1024/1024; // in MB
if (FileSize > 2) {
alert('File size exceeds 2 MB');
// $(file).val(''); //for clearing with Jquery
} else {
}
}
<input onchange="ValidateSize(this)" type="file">
FileSize方法是一種非標準功能,自Gecko 7.0以後不推薦使用。 https://developer.mozilla.org/en-US/docs/Web/API/File/fileSize – MissRaphie 2017-07-10 17:11:41
尼斯答案。我有同樣的問題,但你的解決方案爲我工作:) – 2017-07-13 10:27:33
JQuery ex在這個線程提供了充足是非常過時的,而谷歌是沒有幫助的所有所以這裏是我的版本:
<script type="text/javascript">
$('#image-file').on('change', function() {
console.log($(this)[0].files[0].name+' file size is: ' + $(this)[0].files[0].size/1024/1024 + 'Mb');
});
</script>
- 1. 驗證上傳文件大小
- 2. 在上傳前驗證文件大小
- 3. 驗證大文件上傳
- 4. 如何在上傳之前在JavaScript中驗證文件大小
- 5. 驗證上傳大小
- 6. Jquery文件上傳之前上傳大小驗證
- 7. 多文件上傳「文件[]」 JavaScript驗證
- 8. 客戶端文件大小驗證javascript
- 9. JavaScript驗證多個文件的大小
- 10. jQuery的文件上傳 - 驗證文件大小和延伸
- 11. 使用parsley.js驗證最大文件上傳大小
- 12. 如何在上傳前驗證上傳文件的文件大小?
- 13. Carrierwave翻譯上驗證文件大小
- 14. Struts 1上傳大文件驗證
- 15. jquery驗證文件大小
- 16. 使用javascript/jquery驗證文件上傳
- 17. 使用jQuery表單驗證遠程方法驗證上傳的文件大小
- 18. 什麼地方可以驗證文件上傳大小限制?
- 19. 驗證上傳的圖像的文件大小和數量
- 20. 文件上傳:大小驗證器或setMaxFileSize()
- 21. 如何在ASP.NET C#上傳時驗證文件的大小?
- 22. 驗證上傳文件的大小和病毒
- 23. 如何驗證文件的大小,而在Drupal上傳6
- 24. 文件上傳大小驗證不工作的IE
- 25. 如何驗證視頻上傳文件大小
- 26. 如何在上傳前驗證文件大小?
- 27. 驗證Carrierwave上傳的大小
- 28. 使用Carrierwave驗證上傳的大小
- 29. 有條件驗證:如果文件上傳,然後檢查最小大小
- 30. yii CMultiFileUpload最大文件大小驗證
+1對於「所有客戶端的限制(和其他驗證)可以規避」。這對於「本地」/「編譯」數據庫前端應用程序也是如此。並且不要將數據庫訪問密碼放入編譯後的代碼中,甚至不要「加密」(密碼也在代碼中,最近纔看到)。 – masterxilo 2018-01-12 12:13:32