Package com.qq.open.qzone.photo

Source Code of com.qq.open.qzone.photo.QqUpdatePic

package com.qq.open.qzone.photo;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.log4j.Logger;

import com.qq.open.common.OpenQqConstants;
import com.qq.open.common.OpenQqUtils;
import com.qq.open.common.json.JSONException;
import com.qq.open.common.json.JSONObject;
import com.qq.open.qzone.bean.param.QqUpdatePicParamBean;
import com.qq.open.qzone.bean.result.QqUpdatePicResultBean;

/**
* 登录用户上传照片,支持单张上传和批量上传。
*
* @author HaoLiang
* @version 0.1.1
*/
public class QqUpdatePic {
 
  /** QQ互联工具类 */
  private OpenQqUtils oqu = new OpenQqUtils();
 
  /** 日志 */
  private Logger log = Logger.getLogger(QqUpdatePic.class);
 
 
  /**
   * 登录用户上传照片 - 单张上传
   *
   * @param paramBean 参数
   * @return 返回结果
   * @throws IOException
   * @throws JSONException
   */
  public QqUpdatePicResultBean updateOnePic(QqUpdatePicParamBean paramBean) throws IOException, JSONException {
   
    // 日志
    log.info("登录用户上传照片 - 单张上传 开始...");
   
    // 请求接口并接收返回的数据
    String jsonData = oqu.doPost(OpenQqConstants.QQ_UPDATE_PIC_URL, this.getUpdatePicParam(paramBean));
   
    // 返回结果
    QqUpdatePicResultBean resultBean = this.jsonToBean(jsonData);
   
    // 日志
    log.info("登录用户上传照片 - 单张上传 开始...");
   
    return resultBean;
  }
 
  /**
   * 登录用户上传照片 - 批量上传
   *
   * @param paramBean 参数
   * @return 接口返回信息
   * @throws IOException
   * @throws JSONException
   */
  public List<QqUpdatePicResultBean> updateMorePic(List<QqUpdatePicParamBean> paramBeanList) throws IOException, JSONException {
   
    // 日志
    log.info("登录用户上传照片 - 批量上传 开始...");
   
    // 接口返回信心
    List<QqUpdatePicResultBean> resultBeanList = new ArrayList<QqUpdatePicResultBean>();
   
    // 批量上传照片的总张数
    int picNum = paramBeanList.size();
   
    // 循环上传照片
    for (int i = 0; i < paramBeanList.size(); i++) {
      // 日志
      log.info("共" + paramBeanList.size() + "张照片,当前第" + (i+1));
      // 获取一张照片的信息
      QqUpdatePicParamBean paramBean = paramBeanList.get(i);
      // 设置批量上传照片时,已成功上传的张数
      paramBean.setSuccessNum(i);
      // 批量上传照片的总张数
      paramBean.setPicNum(picNum);
      // 请求接口上传照片
      String jsonData = oqu.doPost(OpenQqConstants.QQ_UPDATE_PIC_URL, this.getUpdatePicParam(paramBean));
      // 接受接口返回的数据
      resultBeanList.add(this.jsonToBean(jsonData));
    }
   
    // 日志
    log.info("登录用户上传照片 - 批量上传 结束...");
   
    return resultBeanList;
  }
 
 
  /**
   * 获取上传图片的参数
   *
   * @param paramBean 参数Bean
   * @return 参数
   * @throws UnsupportedEncodingException
   * @throws Exception
   */
  private MultipartEntity getUpdatePicParam(QqUpdatePicParamBean paramBean) throws UnsupportedEncodingException {
    MultipartEntity reqEntity = new MultipartEntity();
   
    // AccessToken
      reqEntity.addPart("access_token", new StringBody(paramBean.getAccessToken()));
     
      // AppId
      reqEntity.addPart("oauth_consumer_key", new StringBody(oqu.getConfigValue("qq.appid")));
     
      // OpenId
      reqEntity.addPart("openid", new StringBody(paramBean.getOpenId()));
   
      // 照片描述
    if (oqu.isNotNull(paramBean.getPhotoDesc())) {
      reqEntity.addPart("photodesc", new StringBody(paramBean.getPhotoDesc(),Charset.forName("UTF-8")));
    }

    // 照片的命名
    if (oqu.isNotNull(paramBean.getTitle())) {
      reqEntity.addPart("title", new StringBody(paramBean.getTitle(),Charset.forName("UTF-8")));
    }
   
    // 相册id
    if (oqu.isNotNull(paramBean.getAlbumId())) {
      reqEntity.addPart("albumid", new StringBody(paramBean.getAlbumId()));
    }
   
    // 照片拍摄时的地理位置的经度
    if (oqu.isNotNull(paramBean.getLongitude())) {
      reqEntity.addPart("x", new StringBody(paramBean.getLongitude()));
    }
   
    // 照片拍摄时的地理位置的纬度
    if (oqu.isNotNull(paramBean.getLatitude())) {
      reqEntity.addPart("y", new StringBody(paramBean.getLatitude()));
    }
   
    // 定义API返回的数据格式
    reqEntity.addPart("format", new StringBody("json"));
   
    // 标识上传照片时是否要发feed
    reqEntity.addPart("needfeed", new StringBody(String.valueOf(paramBean.getNeedFeed())));
   
    // 已成功上传的张数
    if (paramBean.getSuccessNum() > 0) {
      reqEntity.addPart("successnum", new StringBody(String.valueOf(paramBean.getSuccessNum())));
    }
   
    // 批量上传照片的总张数
    if (paramBean.getPicNum() > 0) {
      reqEntity.addPart("picnum", new StringBody(String.valueOf(paramBean.getPicNum())));
    }
   
    // 图片的内容
    FileBody fileBody = new FileBody(new File(paramBean.getPicPath()));
    reqEntity.addPart("picture", fileBody);
   
    return reqEntity;
  }
 
 
 
  /**
   * 获取上传照片后的接口返回的数据
   *    把返回的数据封装到Bean
   *
   * @param jsonData 接口返回的数据
   * @return 照片上传返回Bean
   * @throws JSONException
   */
  private QqUpdatePicResultBean jsonToBean(String jsonData) throws JSONException {
    QqUpdatePicResultBean resultBean = new QqUpdatePicResultBean();
   
    // 接口返回的数据json
    JSONObject jsonObjRoot;
    try {
      jsonObjRoot = new JSONObject(jsonData);
   
      // 接口返回错误的场合
      if (jsonObjRoot.getInt("ret") != 0) {
        // 设置错误标识为真
        resultBean.setErrorFlg(true);
       
        // 设置错误编号
        resultBean.setErrorCode(jsonObjRoot.get("ret").toString());
       
        // 设置错误信息
        resultBean.setErrorMes(jsonObjRoot.getString("msg"));
      } else {
        // 相册ID
        resultBean.setAlbumId(jsonObjRoot.get("albumid").toString());
       
        // 大图ID
        resultBean.setLloc(jsonObjRoot.get("lloc").toString());
       
        // 小图ID
        resultBean.setSloc(jsonObjRoot.get("sloc").toString());
       
        // 大图地址
        resultBean.setLargeUrl(jsonObjRoot.getString("large_url"));
       
        // 小图地址
        resultBean.setSmallUrl(jsonObjRoot.getString("small_url"));
       
        // 图片高(单位:像素)
        resultBean.setHeight(jsonObjRoot.get("height").toString());
       
        // 图片宽(单位:像素)
        resultBean.setWidth(jsonObjRoot.get("width").toString());
      }
    } catch (JSONException e) {
      e.printStackTrace();
      // 日志
      log.error("updatePic 异常,json数据是:" + jsonData);
      throw e;
    }
   
    return resultBean;
  }
}
TOP

Related Classes of com.qq.open.qzone.photo.QqUpdatePic

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.