Holen Sie sich die Dateigröße vor dem Hochladen

Lesezeit: 6 Minuten

Holen Sie sich die Dateigrose vor dem Hochladen
Nisanth Kumar

Gibt es eine Möglichkeit, die Dateigröße herauszufinden, bevor die Datei mit AJAX / PHP hochgeladen wird, wenn sich die Eingabedatei ändert?

  • 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

Holen Sie sich die Dateigrose vor dem Hochladen
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 von File Objekte, was eine Erweiterung von ist Glob. Und laut spez, Glob definiert tatsächlich die size 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


1644321187 339 Holen Sie sich die Dateigrose vor dem Hochladen
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

1644321187 690 Holen Sie sich die Dateigrose vor dem Hochladen
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.

Holen Sie sich die Dateigrose vor dem Hochladen
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);
    }
}

von http://www.dotnet-tricks.com/Tutorial/jquery/HHLN180712-Get-file-size-before-upload-using-jquery.html

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

1644321188 654 Holen Sie sich die Dateigrose vor dem Hochladen
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

1644321188 899 Holen Sie sich die Dateigrose vor dem Hochladen
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);
}

.

822300cookie-checkHolen Sie sich die Dateigröße vor dem Hochladen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy