ImageDownloader now creates parent directory if it doesn't exist
implemented CardImageDownloader