博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众号接口新增永久素材
阅读量:6688 次
发布时间:2019-06-25

本文共 9765 字,大约阅读时间需要 32 分钟。

代码:(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;@Servicepublic 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

你可能感兴趣的文章
读取日志文件开发总结
查看>>
微星G41TM-P31主板安装centos5.6 x64认不到网卡
查看>>
jdk内部方法获取本机MAC地址
查看>>
Qt学习笔记一:入门
查看>>
VMware Horzion Workspace POC文档—安装3(集成ThinApp,发布应用)
查看>>
在WordPress第一篇文章里添加广告
查看>>
jQuery选择器总结
查看>>
无法加载协定为“WeatherWebServiceSoap”的终结点配置部分,因为找到了该协定的多个终结点配置...
查看>>
活动目录基础
查看>>
IOS --React Native
查看>>
Linux CPU
查看>>
用模板实现顺序表与单链表
查看>>
c++中重载,重写,重定义的区别
查看>>
nagios监控
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
如何在Rancher Catalog中使用VMware Harbor
查看>>
13.C#--求1-100之间所有整数的和
查看>>
40.C#--面对对象,类的继承和构造函数继承的使用
查看>>