def upload_local_file(self, local_file_path, file_obj=None):
        """Create a Stored File and upload it's data.  This is a one part do it all type method.  Here is what
        it does:
            1. "Discover" information about the file (mime-type, size)
            2. Create the stored file object in slick
            3. Upload (chunked) all the data in the local file
            4. re-fetch the stored file object from slick, and return it
        """
        if file_obj is None and not os.path.exists(local_file_path):
            return
        storedfile = StoredFile()
        storedfile.mimetype = mimetypes.guess_type(local_file_path)[0]
        storedfile.filename = os.path.basename(local_file_path)
        if file_obj is None:
            storedfile.length = os.stat(local_file_path).st_size
        else:
            file_obj.seek(0,os.SEEK_END)
            storedfile.length = file_obj.tell()
            file_obj.seek(0)
        storedfile = self(storedfile).create()
        md5 = hashlib.md5()
        url = self(storedfile).getUrl() + "/addchunk"
        if file_obj is None:
            with open(local_file_path, 'rb') as filecontents:
                upload_chunks(url, storedfile, filecontents)
        else:
            upload_chunks(url, storedfile, file_obj)
        return self(storedfile).update()