       fileName      = if opts.name or opts.fileName then opts.name or opts.fileName else randFileName
       extension     = fileName.split('.').pop()
       path          = "#{@storagePath}/#{randFileName}.#{extension}"
+      
+      opts.type = 'application/*' if not opts.type
+      opts.meta = {} if not opts.meta
+      opts.size = buffer.length if not opts.size
 
       result = 
         name:       fileName
         extension:  extension
         path:       path
         meta:       opts.meta
-        type:       if opts.type then opts.type else 'application/*'
-        size:       if opts.size then opts.size else buffer.length
+        type:       opts.type
+        size:       opts.size
+        isVideo: if opts.type then opts.type.toLowerCase().indexOf("video") > -1 else false
+        isAudio: if opts.type then opts.type.toLowerCase().indexOf("audio") > -1 else false
+        isImage: if opts.type then opts.type.toLowerCase().indexOf("image") > -1 else false
         versions:
           original:
             path: path
-            type: if opts.type then opts.type else 'application/*'
-            size: if opts.size then opts.size else buffer.length
+            type: opts.type
+            size: opts.size
             extension: extension
-        isVideo: if opts.type then opts.type.toLowerCase().indexOf("video") > -1 else false
-        isAudio: if opts.type then opts.type.toLowerCase().indexOf("audio") > -1 else false
-        isImage: if opts.type then opts.type.toLowerCase().indexOf("image") > -1 else false
         _prefix: @_prefix
         _collectionName: @collectionName
         _storagePath:    @storagePath

            meta:       opts.meta
            type:       response.headers['content-type']
            size:       response.headers['content-length']
            versions:
              original:
                path: path
                type: response.headers['content-type']
                size: response.headers['content-length']
                extension: extension
            isVideo: response.headers['content-type'].toLowerCase().indexOf("video") > -1
            isAudio: response.headers['content-type'].toLowerCase().indexOf("audio") > -1
            isImage: response.headers['content-type'].toLowerCase().indexOf("image") > -1
            _prefix: self._prefix
            _collectionName: self.collectionName
            _storagePath:    self.storagePath

  ###
  @description Require "fs-extra" npm package
  ###
  fs      = Npm.require "fs-extra"
  request = Npm.require "request"
  util    = Npm.require "util"

  ###
  @var {object} bound - Meteor.bindEnvironment aka Fiber wrapper
