Gibt es eine Möglichkeit, die Dateigröße herauszufinden, bevor die Datei mit AJAX / PHP hochgeladen wird, wenn sich die Eingabedatei ändert?
Holen Sie sich die Dateigröße vor dem Hochladen
Nisanth Kumar
Brij
Für das HTML unten
<input type="file" id="myFile" />
Versuche Folgendes:
//binds to onchange event of your input field
$('#myFile').bind('change', function() {
//this.files[0].size gets the size of your file.
alert(this.files[0].size);
});
Siehe folgenden Thread:
Wie überprüfe ich die Dateieingabegröße mit jQuery?
-
Ist das Datei-Array im Internet Explorer (ältere Versionen) nicht vorhanden?
– Tiago César Oliveira
18. April 13 um 14:26 Uhr
-
Ja, dies funktioniert nicht vor IE 10 und wird nur teilweise von Android und iOS unterstützt. caniuse.com/fileapi. Wenn es nur so einfach wäre…
– Stöcke
30. Mai ’13 um 14:48 Uhr
-
Ich nehme an, das Ergebnis ist in Bytes?
– Erdal G.
13. Mai ’16 um 12:00 Uhr
-
@ErdalG. Gute Frage! MDN ist fehlen die Dokumentation, aber
FileList.files
ist ein Array-ähnlich vonFile
Objekte, was eine Erweiterung von istGlob
. Und laut spez,Glob
definiert tatsächlich diesize
Eigenschaft als die Anzahl von Byte (0 für eine leere Datei). Also ja, das Ergebnis ist in Byte.– John Weiss
27. Januar 17 um 15:36 Uhr
zackigweich
Hier ist ein einfaches Beispiel, wie Sie die Größe einer Datei vor dem Hochladen ermitteln können. Es verwendet jQuery, um zu erkennen, wann der Inhalt hinzugefügt oder geändert wird, aber Sie können immer noch files[0].size
ohne jQuery zu verwenden.
$(document).ready(function() {
$('#openFile').on('change', function(evt) {
console.log(this.files[0].size);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="upload.php" enctype="multipart/form-data" method="POST" id="uploadform">
<input id="openFile" name="img" type="file" />
</form>
Hier ist ein vollständigeres Beispiel, etwas Proof-of-Concept-Code dazu Drag-and-Drop-Dateien in FormData und per POST auf einen Server hochladen. Es enthält eine einfache Überprüfung der Dateigröße.
<script type="text/javascript">
function AlertFilesize(){
if(window.ActiveXObject){
var fso = new ActiveXObject("Scripting.FileSystemObject");
var filepath = document.getElementById('fileInput').value;
var thefile = fso.getFile(filepath);
var sizeinbytes = thefile.size;
}else{
var sizeinbytes = document.getElementById('fileInput').files[0].size;
}
var fSExt = new Array('Bytes', 'KB', 'MB', 'GB');
fSize = sizeinbytes; i=0;while(fSize>900){fSize/=1024;i++;}
alert((Math.round(fSize*100)/100)+' '+fSExt[i]);
}
</script>
<input id="fileInput" type="file" onchange="AlertFilesize();" />
Arbeite an IE und FF
-
herabgestimmt, weil die Antwort ActiveX verwendet. 2015 verabschiedet sich sogar Microsoft von ActiveX. Obwohl es ein vernünftiger Vorschlag war, wenn er gegeben wurde, würde ich Entwicklern empfehlen, dies jetzt und in Zukunft zu vermeiden.
– Schottenstein
30. Januar 15 um 22:41 Uhr
-
Ich mag diese Lösung, weil nur ältere Versionen von IE true für window.ActiveXObject zurückgeben.
– Rob Breecker
4. Juni 15 um 16:36 Uhr
-
@scottstone Ich verstehe nicht, warum Sie alle Antworten, die ältere Browser unterstützen, abgelehnt haben? Diese Antwort ist viel sauberer als die, die Browser-Fingerabdrücke verwendet, und empfiehlt niemandem, ActiveX zu verwenden.
– Nicolas Bouvrette
25. Juni 17 um 19:43 Uhr
-
@NicolasBouvrette – Ich stimme zu, dass diese Antwort viel sauberer ist als die anderen, aber ich kann die Ablehnung an dieser Stelle nicht entfernen. Die ursprüngliche Frage fragte nicht nach Kompatibilität mit alten Versionen von IE, und diese Antwort weist die Leser nicht darauf hin, dass der größte Teil des Codes zur Unterstützung von 5+ Jahre alten Versionen von IE da ist.
– Schottenstein
28. Juni 17 um 23:15 Uhr
-
@scottstone Eigentlich ist aus meiner Sicht ein weiterer greifbarer Punkt, warum man ActiveX nicht verwenden sollte, weil es eine Warnmeldung im IE anzeigt, was eine schreckliche (beängstigende?) Benutzererfahrung ist.
– Nicolas Bouvrette
3. Juli 17 um 15:25 Uhr
Hoang Le
Ich hatte das gleiche Problem und es scheint, als hätten wir keine genaue Lösung. Hoffe, dies kann anderen Menschen helfen.
Nachdem ich mir Zeit genommen hatte, herumzustöbern, fand ich endlich die Antwort. Dies ist mein Code, um Dateianhänge mit jQuery zu erhalten:
var attach_id = "id_of_attachment_file";
var size = $('#'+attach_id)[0].files[0].size;
alert(size);
Dies ist nur der Beispielcode zum Abrufen der Dateigröße. Wenn Sie andere Dinge tun möchten, können Sie den Code gerne ändern, um Ihre Anforderungen zu erfüllen.
ucefkh
Beste Lösung, die auf allen Browsern funktioniert 😉
function GetFileSize(fileid) {
try {
var fileSize = 0;
// for IE
if(checkIE()) { //we could use this $.browser.msie but since it's deprecated, we'll use this function
// before making an object of ActiveXObject,
// please make sure ActiveX is enabled in your IE browser
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
var filePath = $("#" + fileid)[0].value;
var objFile = objFSO.getFile(filePath);
var fileSize = objFile.size; //size in b
fileSize = fileSize / 1048576; //size in mb
}
// for FF, Safari, Opeara and Others
else {
fileSize = $("#" + fileid)[0].files[0].size //size in b
fileSize = fileSize / 1048576; //size in mb
}
alert("Uploaded File Size is" + fileSize + "MB");
}
catch (e) {
alert("Error is :" + e);
}
}
AKTUALISIEREN :
Wir verwenden diese Funktion, um zu überprüfen, ob es sich um den IE-Browser handelt oder nicht
function checkIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv:11./)){
// If Internet Explorer, return version number
alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
} else {
// If another browser, return 0
alert('otherbrowser');
}
return false;
}
-
herabgestimmt, weil die Antwort ActiveX verwendet. 2015 verabschiedet sich sogar Microsoft von ActiveX. Obwohl es ein vernünftiger Vorschlag war, wenn er gegeben wurde, würde ich Entwicklern empfehlen, dies jetzt und in Zukunft zu vermeiden. –
– Schottenstein
30. Januar 15 um 22:42 Uhr
-
$.browser wurde in Version 1.9 aus jQuery entfernt (veraltet seit v 1.3).
– Silvio Delgado
21. März 15 um 20:08 Uhr
-
@scottstone dies dient der Abwärtskompatibilität und das stimmt nicht. Microsoft wird ActiveX nicht aufgeben, es wird in vielen Dingen zu häufig verwendet, und hier ist der Beweis computerworld.com/article/2481188/internet/…
– ucefkh
23. März 15 um 16:55 Uhr
-
@SilvioDelgado Geändert und aktualisiert, sie haben $.browser in ein Plugin entfernt, also brauchen wir nur einen kleinen Test für den IE-Browser (funktioniert mit allen Versionen)
– ucefkh
23. März 15 um 17:03 Uhr
Viraj Nalawade
$(document).ready(function() {
$('#openFile').on('change', function(evt) {
console.log(this.files[0].size);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="upload.php" enctype="multipart/form-data" method="POST" id="uploadform">
<input id="openFile" name="img" type="file" />
</form>
-
herabgestimmt, weil die Antwort ActiveX verwendet. 2015 verabschiedet sich sogar Microsoft von ActiveX. Obwohl es ein vernünftiger Vorschlag war, wenn er gegeben wurde, würde ich Entwicklern empfehlen, dies jetzt und in Zukunft zu vermeiden. –
– Schottenstein
30. Januar 15 um 22:42 Uhr
-
$.browser wurde in Version 1.9 aus jQuery entfernt (veraltet seit v 1.3).
– Silvio Delgado
21. März 15 um 20:08 Uhr
-
@scottstone dies dient der Abwärtskompatibilität und das stimmt nicht. Microsoft wird ActiveX nicht aufgeben, es wird in vielen Dingen zu häufig verwendet, und hier ist der Beweis computerworld.com/article/2481188/internet/…
– ucefkh
23. März 15 um 16:55 Uhr
-
@SilvioDelgado Geändert und aktualisiert, sie haben $.browser in ein Plugin entfernt, also brauchen wir nur einen kleinen Test für den IE-Browser (funktioniert mit allen Versionen)
– ucefkh
23. März 15 um 17:03 Uhr
Sandeep G
Browser mit HTML5-Unterstützung haben die Dateieigenschaft für den Eingabetyp. Dies funktioniert natürlich nicht in älteren IE-Versionen.
var inpFiles = document.getElementById('#fileID');
for (var i = 0; i < inpFiles.files.length; ++i) {
var size = inpFiles.files.item(i).size;
alert("File Size : " + size);
}
.
und offensichtlich Duplikat von stackoverflow.com/search?q=file+size+before+upload
– Ihr gesunder Menschenverstand
21. September 11 um 9:22 Uhr
mögliches Duplikat von How to check file input size with jQuery?
– L84
1. Juni 15 um 16:11 Uhr
Mögliches Duplikat der JavaScript-Datei-Upload-Größenvalidierung
– Frank Tan
19. September 16 um 15:42 Uhr