微信公众号接口新增永久素材

官网链接

代码:(copy别人的,时间久了忘了出路,见谅!)

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;

import net.sf.json.JSONObject;
import util.AccessTokenUtil;

public class Upload {
    public static void main(String[] args) {
        try {
            String path = "C:/1.jpg";
            JSONObject object = addMaterialEver(path,"image",AccessTokenUtil.getAccessToken());
            System.out.println(object.toString());
        } catch (Exception e) {
            System.out.println("---");
        }
    }
    public static  String connectHttpsByPost(String path, String KK, File file) throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {
        URL urlObj = new URL(path);
        //连接
        HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
        String result = null;
        con.setRequestMethod("POST");
        con.setDoInput(true);

        con.setDoOutput(true);

        con.setUseCaches(false); // post方式不能使用缓存

        // 设置请求头信息
        con.setRequestProperty("Connection", "Keep-Alive");
        con.setRequestProperty("Charset", "UTF-8");
        // 设置边界
        String BOUNDARY = "----------" + System.currentTimeMillis();
        con.setRequestProperty("Content-Type",
                "multipart/form-data; boundary="
                        + BOUNDARY);

        // 请求正文信息
        // 第一部分:
        StringBuilder sb = new StringBuilder();
        sb.append("--"); // 必须多两道线
        sb.append(BOUNDARY);
        sb.append("\r\n");
        sb.append("Content-Disposition: form-data;name=\"media\";filelength=\"" + file.length() + "\";filename=\""

                + file.getName() + "\"\r\n");
        sb.append("Content-Type:application/octet-stream\r\n\r\n");
        byte[] head = sb.toString().getBytes("utf-8");
        // 获得输出流
        OutputStream out = new DataOutputStream(con.getOutputStream());
        // 输出表头
        out.write(head);

        // 文件正文部分
        // 把文件已流文件的方式 推入到url中
        DataInputStream in = new DataInputStream(new FileInputStream(file));
        int bytes = 0;
        byte[] bufferOut = new byte[1024];
        while ((bytes = in.read(bufferOut)) != -1) {
            out.write(bufferOut, 0, bytes);
        }
        in.close();
        // 结尾部分
        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
        out.write(foot);
        out.flush();
        out.close();
        StringBuffer buffer = new StringBuffer();
        BufferedReader reader = null;
        try {
            // 定义BufferedReader输入流来读取URL的响应
            reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            if (result == null) {
                result = buffer.toString();
            }
        } catch (IOException e) {
            System.out.println("发送POST请求出现异常!" + e);
            e.printStackTrace();
        } finally {
            if (reader != null) {
                reader.close();
            }
        }
        return result;
    }
    /**
     * 上传其他永久素材(图片素材的上限为5000,其他类型为1000)
     *
     * @return
     * @throws Exception
     */
    public static JSONObject addMaterialEver(String fileurl, String type, String token) {
        try {
            File file = new File(fileurl);
            //上传素材
            String path = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=" + token + "&type=" + type;
            String result = connectHttpsByPost(path, null, file);
            result = result.replaceAll("[\\\\]", "");
            System.out.println("result:" + result);
            JSONObject resultJSON = JSONObject.fromObject(result);
            if (resultJSON != null) {
                if (resultJSON.get("media_id") != null) {
                    System.out.println("上传" + type + "永久素材成功");
                    return resultJSON;
                } else {
                    System.out.println("上传" + type + "永久素材失败");
                }
            }
            return null;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        return null;
    }
    
}
View Code

下面两个类是作者自己的

AccessTokenUtil

package util;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;


/**
 * @todo 获取ACCESSTOKEN和jsapi_ticket
 * @author zhangyanan
 * @date 2018年7月31日
 */
public class AccessTokenUtil {
    /**
     * @todo 获取ACCESSTOKEN
     * @author zhangyanan
     * @date 2018年7月31日
     */
    public static String getAccessToken() {
        InputStreamReader read = null;
        BufferedReader bufferedReader = null;
        String ACCESSTOKEN = "";
        try {
            read = new InputStreamReader(new FileInputStream(ConfigUtil.getProperty("accesstokenpath")), "UTF-8");
            bufferedReader = new BufferedReader(read);
            ACCESSTOKEN=bufferedReader.readLine();
            System.out.println("ACCESSTOKEN:"+ACCESSTOKEN);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
                read.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return ACCESSTOKEN;
    }
    /**
     * @todo 获取jsapi_ticket
     * @author zhangyanan
     * @date 2018年7月31日
     */
    public static String getJsApiTicket() {
        InputStreamReader read = null;
        BufferedReader bufferedReader = null;
        String ACCESSTOKEN = "";
        try {
            read = new InputStreamReader(new FileInputStream(ConfigUtil.getProperty("ticketpath")), "UTF-8");
            bufferedReader = new BufferedReader(read);
            ACCESSTOKEN=bufferedReader.readLine();
            System.out.println("ACCESSTOKEN:"+ACCESSTOKEN);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedReader.close();
                read.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return ACCESSTOKEN;
    }
}
View Code

生成AccessToken:

package task;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import net.sf.json.JSONObject;
import util.ConfigUtil;
import util.HttpRequest;

@Service
public class AccessTokenController {
    private static final Logger logger = LoggerFactory.getLogger(AccessTokenController.class);
    @Scheduled(cron = "0/30 * * * * ? ")
    public void wxServerWork() {
        String json = HttpRequest.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
                + ConfigUtil.getProperty("APPID") + "&secret=" + ConfigUtil.getProperty("APPSECRET"));
        logger.info(json);
        String ACCESSTOKEN = (String) JSONObject.fromObject(json).get("access_token");
        logger.info("access_token:\r\n" + ACCESSTOKEN);// 网页授权access_token
        //get jsapi_ticket
        getAndSaveJsapiTicket(ACCESSTOKEN);
        fileWriter(ConfigUtil.getProperty("accesstokenpath"), ACCESSTOKEN);
    }
    
    /**
     * @todo 获取jsapi_ticket
     * @author zhangyanan
     * @param accesstoken 
     * @date 2018年7月31日
     */
    private void getAndSaveJsapiTicket(String accesstoken){
        String url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accesstoken+"&type=jsapi";
        String sendGet = HttpRequest.sendGet(url);
        logger.info("sendGet"+sendGet);
        JSONObject fromObject = JSONObject.fromObject(sendGet);
        if(fromObject.getInt("errcode")==0){
            fileWriter(ConfigUtil.getProperty("ticketpath"), fromObject.getString("ticket"));
        }else{
            //获取签名失败
            logger.error("获取微信签名失败,errorcode:"+fromObject.getInt("errcode")+"\terrorMsg:"+fromObject.getString("errmsg"));
        }
    }
    
    /**
     * @todo 向文件中写入数据
     * @author zhangyanan.
     * @param path 写入文件路径
     * @param content 写入的内容
     * @date 2018年7月31日
     */
    private void fileWriter(String path,String content){
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(path);
            out.write(content.getBytes());
            logger.info("获取AccessToken成功!");
        } catch (FileNotFoundException e) {
            logger.info("获取AccessToken失败!");
            e.printStackTrace();
        } catch (IOException e) {
            logger.info("获取AccessToken失败!");
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                logger.error("fileWriter关闭异常"+e);
            }
        }
    }
}
View Code

 

转载于:https://www.cnblogs.com/yanan7890/p/9190490.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值