Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Angular2 + TypeScript file size Pipe/Filter. Convert bytes into largest possible unit. e.g. 1024 => 1 KB - Using standard decimal pipe to convert number to local format.
import { Pipe, PipeTransform, LOCALE_ID, Inject } from '@angular/core';
import {DecimalPipe} from '@angular/common';
/*
* Convert bytes into largest possible unit.
* Takes an precision argument that defaults to 2.
* Usage:
* bytes | fileSize:precision
* Example:
* {{ 1024 | fileSize}}
* formats to: 1 KB
*/
@Pipe({
name: 'filesize'
})
export class FilesizePipe implements PipeTransform {
deciPipe: DecimalPipe;
private units = [
'Bytes',
'KB',
'MB',
'GB',
'TB',
'PB'
];
constructor(@Inject(LOCALE_ID) localeId) {
this.deciPipe = new DecimalPipe(localeId);
}
transform(bytes: number = 0, precision: number = 2 ): string {
if ( isNaN( parseFloat( String(bytes) )) || ! isFinite( bytes ) ) { return '?'; }
let unit = 0;
while ( bytes >= 1024 ) {
bytes /= 1024;
unit ++;
}
if (unit === 0) {
precision = 0;
}
return this.deciPipe.transform(bytes, '1.1-' + precision) + ' ' + this.units[ unit ];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.