Java 微信公众号上传永久素材的方法

Java 微信公众号上传永久素材的方法

学习了:http://blog.csdn.net/u013791374/article/details/53258275

膜拜一下,源码如下:

@RequestMapping(value="create")
    public String create(@RequestParam MultipartFile  file, HttpServletRequest request, HttpServletResponse response, HttpSession httpSession, RedirectAttributes attr){
        try {
            String fileName = file.getOriginalFilename();
            fileName = URLEncoder.encode(fileName, "UTF-8");// 进行中文处理
            String UPLOAD_PATH = File.separator + "upload" + File.separator + "img" + File.separator;
            String path = request.getSession().getServletContext().getRealPath(UPLOAD_PATH);
            String pathFileName = path + File.separator + fileName;
            file.transferTo(new File(pathFileName));
            JSONObject mediaJson = addMaterialEver(pathFileName, "image", accessToken.getAccessToken());
            if (mediaJson != null) {
                Media media = new Media();
                media.setMediaId(mediaJson.getString("media_id"));
                media.setUrl(mediaJson.getString("url"));
                media.setUpdateTime(new Date());
                media.setUrl2(fileUpload.fileUpload(file, "", request, response));

                mediaMapper.insertSelective(media);
                attr.addFlashAttribute("message", "成功添加图片信息!");

            } else {
                attr.addFlashAttribute("message", "添加图片出现问题,请与管理员联系!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:index.do";
    }
/**
     * 上传其他永久素材(图片素材的上限为5000,其他类型为1000)
     *
     * @return
     * @throws Exception
     */
    public  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 {
                    Integer errcode = (Integer) resultJSON.get("errcode");
                    if(errcode -40001 == 0 ){
                        accessToken.delAccessToken();
                    }
                    System.out.println("上传" + type + "永久素材失败");
                }
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    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.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;
    }
时间: 2024-12-28 11:16:17

Java 微信公众号上传永久素材的方法的相关文章

公众号上传临时素材

$imgUrl ='E:/boc/m/statics/images/banner.png';//路径非域名 $token ='14_gyVO8oLgwKdst05lcWxWFYI9ShW0dfbxUB_0kMNRFAm2pVTa6FpFcR-oSzYAuAs6X2U3WVQ-FE874IpnekG-AczlgGtdzmxIJ0dLCOee08x769IPSVlqdNYLhABAJUH'; $URL ='http://file.api.weixin.qq.com/cgi-bin/media/upl

java微信接口之四—上传素材

一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN 其中ACCESS_TOKEN是我们动态获取的. 发送的数据: {"articles":[ { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXC

JAVA微信公众号通过openid发送模板消息~

1,问题产生 在微信公众号开发过程中,我们有时候做不同权限的时候,比如在注册的时候,需要审核,然后我们要想办法让对方知道审核的结果.这时候我们可以通过模板消息来通知. 2,第一步,首先在微信公众号上获取模板消息 首先,登录微信公众平台,看有没有模板消息这一块,没有的话点击添加功能插件,去添加,这里就省略不说了,这个主要就是选择你公众号的行业对应的模板消息,然后通过审核之后就可以使用了,说是几个工作日 但是一般很快就审核通过的. 有模板消息之后点进来,对应自己所需要的模板消息进行添加,比如,我添加

Java微信公众号开发----关键字自动回复消息

在配置好开发者配置后,本人第一个想要实现的是自动回复消息的功能,说明以下几点: 1. url 仍然不变,还是开发配置里的url 2. 微信采用 xml 格式传输数据 3.微信服务器传给我们的参数主要有(如图): 附上解析xml类的依赖: 1 <!-- dom对象读取写入xml文件 --> 2 <dependency> 3 <groupId>dom4j</groupId> 4 <artifactId>dom4j</artifactId>

“听说你是个程序员,不能把时间消耗在阅读微信公众号上”

不知不觉,最近又关注一大波公众号,其中不乏个人运营的技术类(安卓开发相关)公号.有的来自具一定影响力朋友的推荐或自荐,有的源自偶然读到的一篇干货进而转化关注的. 那么问题来了,加上之前订阅列表里的一长串公众号,怎么有时间一一拜读呢?看着那春风吹又生般的未读红点提示和标题前与日俱增的1条,2条,3条-,总怕错过什么,比如一个又一个学习的机会. 相信有着微信控的朋友,都曾经或者正处于这般焦躁中.所以,本文我们不谈具体的技术知识,就来以自己的亲身感受聊聊这个困扰着你我的揪心问题. 为什么需要微信公众号

JAVA微信公众号开发入门

好久没进博客,最近应某人的要求,要每周写一篇博客,故此今天就把我这周刚学的微信公众号开发的知识在此总结总结,以供后人查阅.我写博客都是简要白话文,勿喷. 1.为什么要学微信公众号开发 微信的用户量庞大,微信公众号的完善和不断的开放力度,企业市场对公众号开发的需求不断增加 2.如何搭建微信开发平台 开发工具什么的就不说了,因为微信是要外网访问的,所有你必须有个网上的服务器资源,而且你必须申请一个微信公众号. 2.1申请微信公众号 公众号有3种:订阅号,服务号,企业号 区别是企业号适合内部人使用,因

Java微信公众号开发

微信公众平台是腾讯为了让用户申请和管理微信公众账号而推出的一个web平台.微信公众账号的种类可以分为3种,并且一旦选定不可更改.按照功能的限制从小到大依次为:订阅号.服务号.企业号.个人只能注册订阅号.注册地址:https://mp.weixin.qq.com/. 开发环境的准备 微信公众号 外网映射工具(开发调试) 与微信的对接的URL应该满足以下的条件: 在公网上能够访问 只支持80端口 映射工具有很多,例如花生壳,ngrok可以将内网映射到公网上面,这样就可以使用公网访问本机的网络服务.下

php 微信公众平台上传多媒体接口 41005错误

文链接: http://www.maoyupeng.com/wechart-upload-image-errorcode-41005.html PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传.这与命令行直接调用cURL程序的语法是一致的: curl_setopt(ch, CURLOPT_POSTF

《初识Java微信公众号开发》 学习中遇到的困难

前一段时间无聊的时候,在慕课网上自学了一点点微信公众号开发(受学姐威胁). 慕课网教程的地址:http://www.imooc.com/learn/368 毕竟是免费的课程,不可能讲的那么详细.所以我吧我遇到的问题跟大家分享一下. 这是我照着课程敲的代码(IDE是Eclipse): https://github.com/Zuosy/WeiXin 发到github上面了. 为了这个,我还专门到廖大的网站上学了一遍Git. 廖大的Git教程传送们:https://www.liaoxuefeng.co