import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class FileUploadService { //Check uploaded file size should be less than or equal to specified size isValidFileMaxSize(file, maxSize: Number): boolean { if (file) { return file.size <= maxSize; } return false; } //Check uploaded file mime type isValidJpegMimeType(file): boolean { if (file) { return file.type === new String("image/jpeg").toLowerCase(); } return false; } //Check uploaded image file dimension isValidImageDimension(file, height: Number, width: Number, callback) { if (file) { const reader: FileReader = new FileReader(); reader.readAsDataURL(file); reader.onload = (e:any) => { var img = new Image(); img.src = e.target.result.toString(); img.onload = () => { const isValid = img.height === height && img.width === width; callback(isValid); }; }; } } //Check valid image file for specific dimension(height and width) and max file size. isValidImageFile(file, callback) { const isValidMime = this.isValidJpegMimeType(file); this.isValidJpegContentType(file,(isValidContent)=>{ //const isValidImage = isValidMime && isValidMaxSize && isValidContent && isValidDimension; const isValidImage = isValidMime && isValidContent; callback(isValidImage); }); } //Check uploaded image file content type for valid jpeg file. isValidJpegContentType(file, callback) { const reader: FileReader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = (e:any) => { var arr = (new Uint8Array(e.target.result).subarray(0, 4)); var header = ''; for (var i = 0; i < arr.length; i++) { header += arr[i].toString(16); } // Magic numbers: http://www.garykessler.net/library/file_sigs.html switch (header) { case "ffd8ffDB": case "ffd8ffe0": case "ffd8ffe1": case "ffd8ffe2": case "ffd8ffe3": case "ffd8ffe8": return callback(true); default: return callback(false); } } } //Get uploaded image binary string getImageBinaryString(file, callback) { const reader: FileReader = new FileReader(); reader.readAsBinaryString(file); reader.onload = (e: any) => { callback(e.target.result.toString()); }; } }