466 Stimmen

Richtiger Weg, um die Größe in Bytes in KB, MB, GB in JavaScript umzuwandeln

Ich habe diesen Code erhalten, um die Größe in Bytes über PHP umzurechnen.

Jetzt möchte ich diese Größen in benutzerfreundliche Größen mit JavaScript umrechnen. Ich habe versucht, diesen Code in JavaScript umzuwandeln, der so aussieht:

function formatSizeUnits(bytes){
  if      (bytes >= 1073741824) { bytes = (bytes / 1073741824).toFixed(2) + " GB"; }
  else if (bytes >= 1048576)    { bytes = (bytes / 1048576).toFixed(2) + " MB"; }
  else if (bytes >= 1024)       { bytes = (bytes / 1024).toFixed(2) + " KB"; }
  else if (bytes > 1)           { bytes = bytes + " bytes"; }
  else if (bytes == 1)          { bytes = bytes + " byte"; }
  else                          { bytes = "0 bytes"; }
  return bytes;
}

Ist das der richtige Weg, dies zu tun? Gibt es einen einfacheren Weg?

16voto

maurocchi Punkte 640

Sie können die filesizejs Bibliothek verwenden.

8voto

medBouzid Punkte 6662

Nur leicht modifiziert den Code der Antwort von @zayarTun, um einen zusätzlichen Parameter einzuschließen, der die Anzahl der Dezimalstellen im Ergebnis repräsentiert (auch wenn die Dezimalstellen null sind, dann ist es nicht notwendig, ein Ergebnis wie 15.00 KB anzuzeigen, stattdessen reicht 15 KB aus, deshalb habe ich den Ergebniswert in parseFloat() eingewickelt)

  bytesForHuman(bytes, dezimalstellen = 2) {
    let einheiten = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']

    let i = 0

    for (i; bytes > 1024; i++) {
        bytes /= 1024;
    }

    return parseFloat(bytes.toFixed(dezimalstellen)) + ' ' + einheiten[i]
  }

8voto

Matee Gojra Punkte 4048

Utility-Methode zum Formatieren von Bytes in die logischste Größenordnung (KB, MB oder GB)

Number.prototype.formatBytes = function() {
    var units = ['B', 'KB', 'MB', 'GB', 'TB'],
        bytes = this,
        i;

    for (i = 0; bytes >= 1024 && i < 4; i++) {
        bytes /= 1024;
    }

    return bytes.toFixed(2) + units[i];
}

let a = 235678; //Bytes

console.log(a.formatBytes()); //Ergebnis ist 230,15KB

6voto

Buzz LIghtyear Punkte 460

Die Verwendung bitwise operation wäre eine bessere Lösung. Versuchen Sie es damit

function formatSizeUnits(bytes)
{
    if ( ( bytes >> 30 ) & 0x3FF )
        bytes = ( bytes >>> 30 ) + '.' + ( bytes & (3*0x3FF )) + 'GB' ;
    else if ( ( bytes >> 20 ) & 0x3FF )
        bytes = ( bytes >>> 20 ) + '.' + ( bytes & (2*0x3FF ) ) + 'MB' ;
    else if ( ( bytes >> 10 ) & 0x3FF )
        bytes = ( bytes >>> 10 ) + '.' + ( bytes & (0x3FF ) ) + 'KB' ;
    else if ( ( bytes >> 1 ) & 0x3FF )
        bytes = ( bytes >>> 1 ) + 'Bytes' ;
    else
        bytes = bytes + 'Byte' ;
    return bytes ;
}

5voto

Zayar Tun Punkte 131

Dies funktioniert für mich.

bytesForHuman(bytes) {
    let units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']

    let i = 0

    for (i; bytes > 1024; i++) {
        bytes /= 1024;
    }

    return bytes.toFixed(1) + ' ' + units[i]
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X