public function copyFile($source, $destination)
{
list($sourcePrefix, $sourcePath) = $this->filterPrefix($source);
list($destPrefix, $destPath) = $this->filterPrefix($destination);
if (($sourceFs = $this->getFilesystem($sourcePrefix)) === null || ($destFs = $this->getFilesystem($destPrefix)) === null) {
throw new WriteException("No filesystem saved under prefix [{$sourcePrefix}].");
}
if (!$sourceFs->exists($sourcePath) || !$sourceFs->isFile($sourcePath) || $destFs->exists($destPath)) {
throw new WriteException("Could not copy {$source}.");
}
$destFs->createFile($destPath, $sourceFs->read($sourcePath));
}