インターネットブラウザによる、FileAPIの対応がIE10で実現されて、殆どのブラウザで実装されたことにより、かなり大きな割合でブラウザを使ってネイティブアプリケーションと同じような機能を持つことが出来るように成りました。
忘れてはいけないのが、iPhoneにおいても、iOS11から実装された「ファイル管理アプリ」により、スマホでもPCでも、結構柔軟なアプリを構築することができるようになったのは非常に嬉しいですね。
そんなファイル管理をする際に、データプロパティには、ファイル属性や更新日時など様々な情報がついていますが、インターフェイス表示にファイルサイズを欠かすことはできません。
そして、当たり前のようにどれもバイト数で登録されていますが、そのまま表示するのが非常に見苦しかったので、簡単にKBやMB(GB、TB)として表示できるように、スニペットを作っておきました。
WEBページで便利に使えるように、javascript版と、PHP版の2つを作っておいたので、コピペで使える備忘録とします。
FileAPIの網羅率
参考 : https://caniuse.com/#search=fileapi
"Can I use"で調べてみると、Global Usageが97.1%もあるではないですか。
opera-mini以外の各ブラウザの最新バージョンは全て対応可能という結果です。
これはもはや、ブラウザ標準と言ってもいいでしょうね。
でも、ブラウザ毎に仕様が微妙に違うことも中にはあるはずなので、プログラム検証は入念に行いましょう。
javascript
// bite @ ファイルサイズ
// decimal @ 小数点桁数(デフォルトは1) [1:0.1 , 2:0.01 , 3:0.001...]
function size_convert(bite , decimal){
decimal = (decimal) ? Math.pow(10,decimal) : 10;
var kiro = 1024;
var size = bite;
var unit = "B";
var units = ["B" , "KB" , "MB" , "GB" , "TB"];
for(var i=(units.length-1); i>0; i--){
if(bite / Math.pow(kiro,i) > 1){
size = Math.round(bite / Math.pow(kiro,i) * decimal) / decimal ;
unit = units[i];
break;
}
}
return String(size) +" "+ unit;
}
size_convert(1000,2)
"1000 B"
size_convert(1000000,2)
"976.56 KB"
size_convert(10000000,2)
"9.54 MB"
size_convert(10000000000,2)
"9.31 GB"
size_convert(10000000000000,2)
"9.09 TB"
デジタルの世界では単位が変わるのが1024毎(2の10乗)なので、その単位を基準に割ってから、桁数調整をしています。
最終的にはそれに単位をつけて完了ですが、PBなどを増やしたい場合は、内部のunits配列の後ろにつければ対応可能です。
また、たまにシステムによっては、ファイルサイズが1000単位で計算したほうがいい場合もあるので、適宜1024 -> 1000に切り替えてお使いください。
php
<?php
echo size_convert($argv[1],$argv[2]) .PHP_EOL;
// bite @ ファイルサイズ
// decimal @ 小数点桁数(デフォルトは1) [1:0.1 , 2:0.01 , 3:0.001...]
function size_convert($bite , $decimal=1){
if(!$bite){return 0;}
$decimal = ($decimal) ? pow(10,$decimal) : 10;
$kiro = 1024;
$size = $bite;
$unit = "B";
$units = ["B" , "KB" , "MB" , "GB" , "TB"];
for($i=count($units)-1; $i>0; $i--){
if($bite / pow($kiro,$i) > 1){
$size = round($bite / pow($kiro,$i) * $decimal) / $decimal ;
$unit = $units[$i];
break;
}
}
return (string)$size ." ". $unit;
}
$ php size_convert.php 10 2
10 B
$ php size_convert.php 10000 2
9.77 KB
$ php size_convert.php 10000000 2
9.54 MB
$ php size_convert.php 10000000000 2
9.31 GB
$ php size_convert.php 10000000000000 2
9.09 TB
javascript版と同様のソースコードにしておいたので、結果も同じです。
CLIを基準にしたコードにしてますが、functionのみを抜き取ってお使いください。
0 件のコメント:
コメントを投稿