Vai ir kāds veids, kā pārbaudīt faila izmēru pirms augšupielādes, izmantojot JavaScript?
Ja, ir jauna W3C funkcija, ko atbalsta dažas modernās pārlūkprogrammas - File API. To var izmantot šim nolūkam, un ir viegli pārbaudīt, vai tas ir atbalstīts, un vajadzības gadījumā izmantot citu mehānismu, ja tas nav atbalstīts.
Šeit ir pilns piemērs:
<!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>
Un šeit tas ir darbībā. Izmēģiniet to ar jaunāko Chrome vai Firefox versiju.
Nedaudz ārpus tēmas, bet: Ņemiet vērā, ka klienta puses validācija neaizstāj servera puses validāciju. Klienta puses validācija ir tikai un vienīgi tādēļ, lai nodrošinātu patīkamāku lietotāja pieredzi. Piemēram, ja nav atļauts augšupielādēt failu, kas lielāks par 5 MB, var izmantot klienta puses validāciju, lai pārbaudītu, vai lietotāja izvēlētā faila izmērs nepārsniedz 5 MB, un, ja tas tā ir, parādītu lietotājam patīkamu ziņojumu (lai lietotājs netērētu visu laiku augšupielādei, bet rezultāts tiktu izmests serverī), taču šis ierobežojums ir jāīsteno arī serverī, jo visus klienta puses ierobežojumus (un citas validācijas) var apiet.
Nē Jā, izmantojot failu API jaunākās pārlūkprogrammās. Sīkāku informāciju skatiet TJ's atbildē.
Ja jums ir nepieciešams atbalstīt arī vecākas pārlūkprogrammas, jums būs jāizmanto uz Flash balstīts augšupielādētājs, piemēram, SWFUpload vai Uploadify, lai to izdarītu.
SWFUpload Features Demo parāda, kā darbojas faila_izmēra_limit
iestatījums.
Ievērojiet, ka tam (acīmredzot) ir nepieciešams Flash, turklāt tā darbība nedaudz atšķiras no parastajām augšupielādes veidlapām.
Jūs varat izmēģināt šo fineuploader
Tas darbojas pareizi ar IE6(un jaunākām versijām), Chrome vai Firefox.