longdengpan 2015-04-18 09:56 采纳率: 50%
浏览 32260
已采纳

微信公众号上传多媒体文件接口用JAVA怎么实现

图片说明

根据图片的描述是通过发送https请求上传图片。微信公众号提供的文档是通过curl命令来实现发送https post请求,但是我现在的程序是通过java程序来发送https post请求。以下是我的3个问题:

1、既然是发送https post请求上传图片,java应该也可以实现,我只实现过java https post的简单请求,没有实现过java https post图片上传。有大神能帮帮我吗?

2、既然微信公众号文档上说是通过curl来发送请求,那java是否提供模拟curl来发送https post请求来实现图片上传。如果java提供,有大神能帮帮我吗?

3、或者有没有谁实现过微信公众号以上截图描述的用java实现的多媒体文件上传功能,有实现过的话,共享以下代码啊!本人感激不尽!。
求大神帮帮忙!

  • 写回答

5条回答 默认 最新

  • 毕小宝 博客专家认证 2015-04-18 11:40
    关注

    这个类,刚忘了一个方法httpsRequestToString,补充如下:

     /**
         * 发送请求以https方式发送请求并将请求响应内容以String方式返回
         * @param path   请求路径
         * @param method 请求方法
         * @param body   请求数据体
         * @return 请求响应内容转换成字符串信息
         */
        public static String httpsRequestToString(String path, String method, String body) {
            if(path==null||method==null){
                return null;
            }
    
            String response = null;
            InputStream inputStream = null;
            InputStreamReader inputStreamReader = null;
            BufferedReader bufferedReader = null;
            HttpsURLConnection conn = null;
            try {
                TrustManager[] tm = { new JEEWeiXinX509TrustManager() };
                SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
                sslContext.init(null, tm, new java.security.SecureRandom());
                SSLSocketFactory ssf = sslContext.getSocketFactory();
                System.out.println(path);
                URL url = new URL(path);
                conn = (HttpsURLConnection) url.openConnection();
                conn.setSSLSocketFactory(ssf);
    
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                conn.setRequestMethod(method);
                if (null != body) {
                    OutputStream outputStream = conn.getOutputStream();
                    outputStream.write(body.getBytes("UTF-8"));
                    outputStream.close();
                }
    
                inputStream = conn.getInputStream();
                inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
                bufferedReader = new BufferedReader(inputStreamReader);
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = bufferedReader.readLine()) != null) {
                    buffer.append(str);
                }
    
                response = buffer.toString();
            } catch (Exception e) {
                logger.error(e);
            }finally{
                if(conn!=null){
                    conn.disconnect();
                }
                try {
                    bufferedReader.close();
                    inputStreamReader.close();
                    inputStream.close();
                } catch (IOException execption) {
                    logger.error(execption);
                }
            }
            return response;
        }
    

    此外,还有一个证书实现类,发送https请求用的,也要定义的。

     class JEEWeiXinX509TrustManager implements X509TrustManager {
        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
        }
    
        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
        }
    
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?