addon/utils/file-object.js
import EmberObject from '@ember/object';
/**
FileObject class
@module utils
@namespace utils
@class FileObject
@constructor
*/
let fileObject = EmberObject.extend({
// ...........................................
// Name is used for the upload property
name: '',
// {Property} Human readable size of the selected file
size: "0 KB",
// {Property} Raw file size of the selected file
rawSize: 0,
// {Property} Indicates if this file is an image we can display
isDisplayableImage: false,
// {Property} String representation of the file
base64Image: '',
// {Property} Will be an HTML5 File
fileToUpload: null,
// {Property} Will be a $.ajax jqXHR
uploadJqXHR: null,
// {Property} Promise for when a file was uploaded
uploadPromise: null,
// {Property} the object that upload a file
uploader: null,
// {Property} Upload progress 0-100
percent: null,
// {Property} If a file is currently being uploaded
isUploading: false,
// {Property} If a file is currently being uploaded
isDeleted: false,
// {Property} If the file was uploaded successfully
isUploaded: false,
// {Property} when the file was uploaded successfully, response data from server
data: null,
readFile: function() {
let self = this;
let fileToUpload = this.get('fileToUpload');
let isImage = fileToUpload.type.indexOf('image') === 0;
this.set('name', fileToUpload.name);
this.set('rawSize', fileToUpload.size);
this.set('size', humanReadableFileSize(fileToUpload.size));
// Don't read anything bigger than 5 MB
if (isImage && fileToUpload.size < 1 * 1024 * 1024) {
this.set('isDisplayableImage', isImage);
// Create a reader and read the file.
var reader = new FileReader();
reader.onload = function(e) {
self.set('base64Image', e.target.result);
};
// Read in the image file as a data URL.
reader.readAsDataURL(fileToUpload);
}
},
init(){
this._super(...arguments);
this.readFile();
}
});
function humanReadableFileSize(size) {
var label = "";
if (size === 0) {
label = "0 KB";
} else if (size && !isNaN(size)) {
var fileSizeInBytes = size;
var i = -1;
do {
fileSizeInBytes = fileSizeInBytes / 1024;
i++;
} while (fileSizeInBytes > 1024);
var byteUnits = [' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB'];
label += Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
}
return label;
}
export {
fileObject,
humanReadableFileSize
};