微信开发☞Java上传Base64图片

阅读更多
import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * 文件处理工具类
 */
public class FileHelpers {

    private static final Logger logger = LogManager.getLogger(FileHelpers.class);

    /**
     * 解析base64格式图片,并保存到临时目录
     *
     * @param base64Str base64格式图片
     * @param file 临时文件对象
     * @return File Object
     * @throws Exception
     */
    public static void decodeBase64ToFile(File file,String base64Str) throws Exception {
        
        OutputStream out = null;
        try {
            int prefixIndex = base64Str.indexOf(",");
            byte[] buffer = Base64.decodeBase64(base64Str.substring(prefixIndex + 1));
            out = new FileOutputStream(file);
            out.write(buffer);
            out.flush();
        } catch (Exception e) {
            logger.debug("decodeBase64ToFile raise exception:" + e.getMessage());
            throw new Exception(e.getMessage());
        } finally {
            if (out!=null) {
                out.close();
            }
        }
    }
}


/*********************************************/

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; 

import java.io.File;
import java.util.Map;
 
public class WeixinMediaUtils {

    private final Logger logger = LogManager.getLogger(ServiceWeixinMedias.class);

    /**
     * 卡券 上传图片接口
     *
     * @param accessToken 开放平台/或者公众平台的accessToken
     * @param imgStream   图片base64字符串
     * @return 上传成功后,返回的图片Url
     */
    public static Map uploadimg(String accessToken, String imgStream) {
        File tempFile = null;
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        try {
            String url = String.format("%s%s",
                    "https://api.weixin.qq.com/cgi-bin/media/uploadimg",
                   "ACCESS_TOKEN="+accessToken))
            ); 
            tempFile = File.createTempFile("weixin_media", ".jpg");
            FileHelpers.decodeBase64ToFile(tempFile, imgStream);

            HttpPost httpPost = new HttpPost(url);
            FileBody fileBody = new FileBody(tempFile);
            HttpEntity httpEntity = MultipartEntityBuilder.create().addPart("buffer", fileBody).build();
            httpPost.setEntity(httpEntity);
            httpClient = HttpClients.createDefault();
            response = httpClient.execute(httpPost);
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                String responseEntityStr = EntityUtils.toString(response.getEntity());
                System.out.println(responseEntityStr);
                System.out.println("Response content length: " + responseEntity.getContentLength());
                return JsonHelpers.deserializeToMap(responseEntityStr).orElseThrow(() -> new Exception("uploadimg failed,response realizeToMap raise Exception"));
            } else {
                throw new Exception(String.format("call weixin interface fail,file 【%s】 upload fail", tempFile.getAbsolutePath()));
            }
        } catch (Throwable t) {
            t.printStackTrace();
            throw new Exception(t.getMessage());
        } finally {
            if (tempFile!=null) {
                tempFile.delete();
            }
            if (httpClient!=null) {
                HttpClientUtils.closeQuietly(httpClient);
            }
            if (response!=null) {
                HttpClientUtils.closeQuietly(response);
            }
        }
    }







    Java使用HttpClient,将Base64图片上传到微信!!

    诸多不完善之处,敬请指正!

你可能感兴趣的:(Java,HttpClient,微信开发,JDK,1.8)