javascript - बाइट्स में केबी, एमबी, जीबी जावास्क्रिप्ट में आकार बदलने के लिए सही तरीका




size byte (9)

मुझे यह कोड PHP, PHP फाइलसाइज एमबी / केबी रूपांतरण का उपयोग कर बाइट्स में आकार को गुप्त करने के लिए मिला है

अब मैं जावास्क्रिप्ट का उपयोग करके मानव पठनीय करने के लिए गुप्त नहीं होना चाहता, मैंने इस कोड को जेएस में बदलने की कोशिश की ताकि ऐसा दिखाई दे ..

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 byte';}
      return bytes;
}

यह करने का एक सही तरीका है? या एक और बेहतर या आसान ?


आप filesizejs लाइब्रेरी का उपयोग कर सकते हैं।


इस सरल कामकाज का प्रयास करें।

var files = $("#file").get(0).files;               
                var size = files[0].size;
                if (size >= 5000000) {
alert("File size is greater than or equal to 5 MB");
}

के जवाब के अनुसार, मैंने दशमलव के बाद 0 हटा दिया:

function formatBytes(bytes, decimals) {
    if(bytes== 0)
    {
        return "0 Byte";
    }
    var k = 1024; //Or 1 kilo = 1000
    var sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB"];
    var i = Math.floor(Math.log(bytes) / Math.log(k));
    return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + " " + sizes[i];
}

बाइट से संबंधित आकारों का प्रतिनिधित्व करने के 2 वास्तविक तरीके हैं, वे एसआई इकाइयां (10 ^ 3) या आईईसी इकाइयां (2 ^ 10) हैं। जेईडीईसी भी है लेकिन उनकी विधि संदिग्ध और भ्रमित है। मैंने देखा कि अन्य उदाहरणों में केबीबी के बजाय केबी के बजाय केबी का उपयोग करने जैसी त्रुटियां हैं, इसलिए मैंने एक ऐसा फ़ंक्शन लिखने का निर्णय लिया जो इन मामलों में से प्रत्येक को मापने की वर्तमान इकाइयों की सीमा का उपयोग करके हल करेगा।

अंत में एक स्वरूपण बिट है जो संख्या को थोड़ा बेहतर दिखाई देगा (कम से कम मेरी आंखों के लिए) अगर वह आपके उद्देश्य के अनुरूप नहीं है तो उस स्वरूपण को हटाने के लिए स्वतंत्र महसूस करें।

का आनंद लें।

// pBytes: the size in bytes to be converted.
// pUnits: 'si'|'iec' si units means the order of magnitude is 10^3, iec uses 2^10

function prettyNumber(pBytes, pUnits) {
    // Handle some special cases
    if(pBytes == 0) return '0 Bytes';
    if(pBytes == 1) return '1 Byte';
    if(pBytes == -1) return '-1 Byte';

    var bytes = Math.abs(pBytes)
    if(pUnits && pUnits.toLowerCase() && pUnits.toLowerCase() == 'si') {
        // SI units use the Metric representation based on 10^3 as a order of magnitude
        var orderOfMagnitude = Math.pow(10, 3);
        var abbreviations = ['Bytes', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
    } else {
        // IEC units use 2^10 as an order of magnitude
        var orderOfMagnitude = Math.pow(2, 10);
        var abbreviations = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
    }
    var i = Math.floor(Math.log(bytes) / Math.log(orderOfMagnitude));
    var result = (bytes / Math.pow(orderOfMagnitude, i));

    // This will get the sign right
    if(pBytes < 0) {
        result *= -1;
    }

    // This bit here is purely for show. it drops the percision on numbers greater than 100 before the units.
    // it also always shows the full number of bytes if bytes is the unit.
    if(result >= 99.995 || i==0) {
        return result.toFixed(0) + ' ' + abbreviations[i];
    } else {
        return result.toFixed(2) + ' ' + abbreviations[i];
    }
}

मैं यहां @Aliceljm उत्तर अपडेट कर रहा हूं। चूंकि दशमलव स्थान 1,2 अंकों की संख्या के लिए महत्वपूर्ण है, इसलिए मैं पहले दशमलव स्थान से बाहर हूं और पहली दशमलव जगह रखता हूं। 3 अंक संख्या के लिए, मैं इकाइयों की जगह को गोल कर रहा हूं और सभी दशमलव स्थानों को अनदेखा कर रहा हूं।

getMultiplers : function(bytes){
    var unit = 1000 ;
    if (bytes < unit) return bytes ;
    var exp = Math.floor(Math.log(bytes) / Math.log(unit));
    var pre = "kMGTPE".charAt(exp-1);
    var result = bytes / Math.pow(unit, exp);
    if(result/100 < 1)
        return (Math.round( result * 10 ) / 10) +pre;
    else
        return Math.round(result) + pre;
}

मैंने मूल रूप से एक फ़ाइल अपलोड प्रोजेक्ट के लिए का जवाब इस्तेमाल किया था, जिस पर मैं काम कर रहा था, लेकिन हाल ही में एक ऐसे मुद्दे में भाग गया जहां फ़ाइल 0.98kb लेकिन 1.02mb रूप में पढ़ी जा रही 1.02mb । यहां अपडेट किया गया कोड है जिसका मैं अब उपयोग कर रहा हूं।

function formatBytes(bytes){
  var kb = 1024;
  var ndx = Math.floor( Math.log(bytes) / Math.log(kb) );
  var fileSizeTypes = ["bytes", "kb", "mb", "gb", "tb", "pb", "eb", "zb", "yb"];

  return {
    size: +(bytes / kb / kb).toFixed(2),
    type: fileSizeTypes[ndx]
  };
}

तब फ़ाइल को जोड़ा जाने के बाद ऊपर दिया जाएगा

// In this case `file.size` equals `26060275` 
formatBytes(file.size);
// returns `{ size: 24.85, type: "mb" }`

24.8mb , विंडोज़ फ़ाइल को 24.8mb रूप में पढ़ता है लेकिन मैं अतिरिक्त परिशुद्धता के साथ ठीक हूं।


यहां एक लाइनर है:

val => ['Bytes','Kb','Mb','Gb','Tb'][Math.floor(Math.log2(val)/10)]

या और भी:

val => 'BKMGT'[~~(Math.log2(val)/10)]


function bytesToSize(bytes) {
  var sizes = ['B', 'K', 'M', 'G', 'T', 'P'];
  for (var i = 0; i < sizes.length; i++) {
    if (bytes <= 1024) {
      return bytes + ' ' + sizes[i];
    } else {
      bytes = parseFloat(bytes / 1024).toFixed(2)
    }
  }
  return bytes + ' P';
}

console.log(bytesToSize(234));
console.log(bytesToSize(2043));
console.log(bytesToSize(20433242));
console.log(bytesToSize(2043324243));
console.log(bytesToSize(2043324268233));
console.log(bytesToSize(2043324268233343));


function formatBytes(bytes) {
    if(bytes < 1024) return bytes + " Bytes";
    else if(bytes < 1048576) return(bytes / 1024).toFixed(3) + " KB";
    else if(bytes < 1073741824) return(bytes / 1048576).toFixed(3) + " MB";
    else return(bytes / 1073741824).toFixed(3) + " GB";
};





converter