首页>代码>Spring+Spring MVC+Freemarker模板整合开发M-LOG博客系统源码下载>/mlog_jsp/src/org/mspring/mlog/api/gravatar/Gravatar.java
/**
 * 
 */
package org.mspring.mlog.api.gravatar;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.Validate;
import org.mspring.platform.utils.StringUtils;

/**
 * @author Gao Youbo
 * @since 2012-8-14
 * @Description
 * @TODO
 */
public final class Gravatar {

    private final static int DEFAULT_SIZE = 80;
    private final static String GRAVATAR_URL = "http://www.gravatar.com/avatar/";
    private static final GravatarRating DEFAULT_RATING = GravatarRating.GENERAL_AUDIENCES;
    private static final GravatarDefaultImage DEFAULT_DEFAULT_IMAGE = GravatarDefaultImage.HTTP_404;

    private int size = DEFAULT_SIZE;
    private GravatarRating rating = DEFAULT_RATING;
    private GravatarDefaultImage defaultImage = DEFAULT_DEFAULT_IMAGE;

    /**
     * Specify a gravatar size between 1 and 512 pixels. If you omit this, a
     * default size of 80 pixels is used.
     */
    public void setSize(int sizeInPixels) {
        Validate.isTrue(sizeInPixels >= 1 && sizeInPixels <= 512, "sizeInPixels needs to be between 1 and 512");
        this.size = sizeInPixels;
    }

    /**
     * Specify a rating to ban gravatar images with explicit content.
     */
    public void setRating(GravatarRating rating) {
        Validate.notNull(rating, "rating");
        this.rating = rating;
    }

    /**
     * Specify the default image to be produced if no gravatar image was found.
     */
    public void setDefaultImage(GravatarDefaultImage defaultImage) {
        Validate.notNull(defaultImage, "defaultImage");
        this.defaultImage = defaultImage;
    }

    /**
     * Returns the Gravatar URL for the given email address.
     */
    public String getUrl(String email) {
        Validate.notNull(email, "email");

        // hexadecimal MD5 hash of the requested user's lowercased email address
        // with all whitespace trimmed
        String emailHash = DigestUtils.md5Hex(email.toLowerCase().trim());
        String params = formatUrlParameters();
        return GRAVATAR_URL + emailHash + ".jpg" + params;
    }

    /**
     * Downloads the gravatar for the given URL using Java {@link URL} and
     * returns a byte array containing the gravatar jpg, returns null if no
     * gravatar was found.
     */
    public byte[] download(String email) throws GravatarDownloadException {
        InputStream stream = null;
        try {
            URL url = new URL(getUrl(email));
            stream = url.openStream();
            return IOUtils.toByteArray(stream);
        }
        catch (FileNotFoundException e) {
            return null;
        }
        catch (Exception e) {
            throw new GravatarDownloadException(e);
        }
        finally {
            IOUtils.closeQuietly(stream);
        }
    }

    private String formatUrlParameters() {
        List<String> params = new ArrayList<String>();

        if (size != DEFAULT_SIZE) params.add("s=" + size);
        if (rating != DEFAULT_RATING) params.add("r=" + rating.getCode());
        if (defaultImage != GravatarDefaultImage.GRAVATAR_ICON) params.add("d=" + defaultImage.getCode());

        if (params.isEmpty()) return "";
        else return "?" + StringUtils.join(params.iterator(), "&");
    }

}
最近下载更多
wanglinddad  LV54 2022年4月22日
SOLEIL.  LV3 2021年6月25日
XcHyxa  LV7 2021年6月9日
Demo1111  LV30 2020年12月24日
起名字是个麻烦事  LV12 2020年7月7日
xuweisong2010  LV27 2020年3月28日
243846758  LV6 2019年12月24日
嘎嘎嘎12358  LV10 2019年12月13日
tzj163  LV5 2019年12月6日
8战魂5无双8  LV43 2019年11月15日
最近浏览更多
微信网友_6680567232876544  LV8 2023年10月10日
薄荷wwww  LV1 2023年6月30日
3416059514  LV1 2023年6月23日
mengmeng12323423  LV3 2023年6月17日
Mhdpig  LV3 2023年5月25日
jinglang  LV11 2023年5月4日
sweetbox  LV10 2023年4月16日
13133117021  LV4 2023年3月10日
陈小灏  LV14 2023年3月10日
gnnhka  LV10 2023年2月4日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友