add CookbookResource.upload function