微信公众号开发:素材管理(临时、永久)

专栏简介
💒个人主页
📰专栏目录
📖心灵鸡汤📖
沙漠之所以美丽,是因为在不远处有一片绿洲。
✍相关博文✍
微信API封装

说明

本文仅供参考,但保证代码有效可用

请优先查阅官网素材管理
1、官网对于素材的说明

2.上传接口的说明

实测临时素材接口中文件参数名media可以非固定参数名,改为如file之类的参数名仍可上传成功
3.access_token
参考: 微信公众号消息推送开发(模板消息):开发实现(二)

代码实现

1.下文演示代码并非接口,可自行修改
2.对voice类型的文件判断时,并没有对时长进行校验,请自行判断
3.以下以图片为演示素材
4使用httpclient模拟请求
引入依赖

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5</version>
        </dependency>

1.新增临时素材

https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE

1.创建mediaUpload.java
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;

/**
 * @author lvyq
 * @version 1.0
 * @description: 文件上传
 * @date 2022/7/14 10:04
 */
public class mediaUpload {

    private static Logger logger = LoggerFactory.getLogger(mediaUpload.class);

    public static final String ACCESS_TOKEN="xxxxxxxx";
    public static void main(String[] args) throws Exception{
        //本地多媒体文件地址
        String file ="D:\\图片.jpeg";
        curlFileUpload(file,"image");
    }
    /**
     * @description: 模拟curl上传本地文件
     * @author: lvyq
     * @date: 2022/7/14 10:05
     * @version 1.0
     */
    public static void curlFileUpload(String filePath,String type) throws Exception{
        String mediaUploadUrl = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE";
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        try {
            File media = new File(filePath);
            mediaUploadUrl =replaceURLByFile(media,type,mediaUploadUrl);
            if (mediaUploadUrl!=null){
                HttpPost httpPost = new HttpPost(mediaUploadUrl);
                MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                //上传多媒体文件
                builder.addBinaryBody("media", media);
                HttpEntity entity = builder.build();
                httpPost.setEntity(entity);
                // 执行提交
                HttpResponse response = httpClient.execute(httpPost);
                HttpEntity responseEntity = response.getEntity();
                if (responseEntity != null) {
                    result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                }
            }else {
                logger.error("上传失败");
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        logger.info("请求成功:"+result);
    }

    /**
     * @description: 校验文件类型
     * @author: lvyq
     * @date: 2022/7/14 10:29
     * @version 1.0
     */

    private static String replaceURLByFile(File media,String type,String mediaUploadUrl) {
        if (media.isFile()){
            //image 校验
            if (type.equals("image")){
                if (!checkFileType(type,getFileSuffix(media))|| getFileSize(media)>10*1024*1024){
                    logger.error("文件类型不支持,或文件大于10M");
                    return null;
                }
            }else if (type.equals("voice")){
            if (!checkFileType(type,getFileSuffix(media)) || getFileSize(media)>2*1024*1024){
                logger.error("文件类型不支持,或文件大于2M");
                return null;
            }
            }else if (type.equals("video")){
                if (!"MP4".equalsIgnoreCase(getFileSuffix(media)) || getFileSize(media)>2*1024*1024){
                    logger.error("文件类型不支持,或文件大于2M");
                    return null;
                }
            }else if (type.equals("thumb")){
                if (!"JPG".equalsIgnoreCase(getFileSuffix(media)) || getFileSize(media)>64*1024){
                    logger.error("文件类型不支持,或文件大于64KB");
                    return null;
                }
            }else {
                logger.error("文件不支持");
                return null;
            }

        }else {
           logger.error("文件不存在");
           return null;
        }
        mediaUploadUrl=mediaUploadUrl.replace("ACCESS_TOKEN",ACCESS_TOKEN).replace("TYPE",type);
        return mediaUploadUrl;
    }

    /**
     * 获取文件后缀名
     *
     * @param file
     * @return
     */
    public static String getFileSuffix(File file) {
        String suffix="";
        String fileName = file.getName();
        if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
            suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        }
        return suffix;
    }

    /**
     * @description: 判断文件类型
     * @author: lvyq
     * @date: 2022/7/15 17:22
     * @version 1.0
     */
    
    public static boolean checkFileType(String type,String mediaType){
        boolean ble = false;
        if (type.equals("image")){
            if (mediaType.equalsIgnoreCase("PNG") || mediaType.equalsIgnoreCase("JPEG") || mediaType.equalsIgnoreCase("JPG") || mediaType.equalsIgnoreCase("GIF")){
                    ble=true;
            }
        }else if(mediaType.equalsIgnoreCase("AMR") || mediaType.equalsIgnoreCase("MP3") ){
            ble=true;

        }
        return ble;
    }

    /**
     * @description: 获取文件大小
     * @author: lvyq
     * @date: 2022/7/15 16:09
     * @version 1.0
     */
    public static long getFileSize(File file) {
        if (!file.exists() || !file.isFile()) {
          logger.error("文件不存在");
          return -1;
        }
        logger.info("length:{}",file.length());
        return file.length();
    }

}

执行结果:

13:09:59.100 [main] INFO mediaUpload - 请求成功:{“type”:“image”,“media_id”:“Dw0HCQJSkt02hWlEY-NC5DRN-kSbmqOVU5ZnjpwEFlmY2jbx9uB4oxATZCdxjwk3”,“created_at”:1657948199,“item”:[]}

临时文件上传成功并返回media_id

2.获取临时素材

临时素材获取的下来后是一个文件流,在浏览器直接放完的话将直接下载到本地

https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID

新增临时素材示例改改
使用上文的media_id

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;

/**
 * @author lvyq
 * @version 1.0
 * @description: 文件上传
 * @date 2022/7/14 10:04
 */
public class mediaUpload {

    private static Logger logger = LoggerFactory.getLogger(mediaUpload.class);

    public static final String ACCESS_TOKEN="xxxxx";
    public static void main(String[] args) throws Exception{
			 httpGet(ACCESS_TOKEN,"Dw0HCQJSkt02hWlEY-NC5DRN-kSbmqOVU5ZnjpwEFlmY2jbx9uB4oxATZCdxjwk3");
    }

    /**
     * @description:获取临时素材
     * @author: lvyq
     * @date: 2022/7/14 10:05
     * @version 1.0
     */
    public static void httpGet(String ACCESS_TOKEN,String MEDIA_ID) throws Exception{
       String url="https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
        url=url.replace("ACCESS_TOKEN",ACCESS_TOKEN).replace("MEDIA_ID",MEDIA_ID);
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        HttpGet httpGet = new HttpGet(url);
                // 执行提交
                HttpResponse response = httpClient.execute(httpGet);
                HttpEntity responseEntity = response.getEntity();
                if (responseEntity != null) {
                    result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                }
        logger.info("请求成功:"+result);
    }
执行后控制台输出

在这里插入图片描述
由此可看出输出的是个文件流,如果供前端回显的话,需要转换,如果在浏览器直接访问的话,将直接下载,官网也给出了说明
在这里插入图片描述
浏览器访问效果
在这里插入图片描述

3.新增永久素材

与临时素材的主要区别:
1.见名知义,不存在过期一说,不会自动删除
2.支持的素材格式也有所不同,详情查看官网文档
上传永久素材的接口有两个,可根据自身需求自行选择,以下根据两个接口简要演示一下

1.上传图文消息内的图片获取URL

使用的好处官方已经给了说明:
在这里插入图片描述
人狠话不多

https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

新增临时素材示例改改

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;

/**
 * @author lvyq
 * @version 1.0
 * @description: 文件上传
 * @date 2022/7/14 10:04
 */
public class mediaUpload {

    private static Logger logger = LoggerFactory.getLogger(mediaUpload.class);

    public static final String ACCESS_TOKEN="xxxxxx";
    public static void main(String[] args) throws Exception{
        //本地多媒体文件地址
        String file ="D:\\图片.jpeg";
        curlFileUpload(file);
    }

    /**
     * @description: 模拟curl上传本地文件
     * @author: lvyq
     * @date: 2022/7/14 10:05
     * @version 1.0
     */
    public static void curlFileUpload(String filePath) throws Exception{
        //上传图文消息内的图片获取URL
         String mediaUploadUrl = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN";
         mediaUploadUrl=mediaUploadUrl.replace("ACCESS_TOKEN",ACCESS_TOKEN);
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        try {
            File media = new File(filePath);
            if (mediaUploadUrl!=null){
                HttpPost httpPost = new HttpPost(mediaUploadUrl);
                MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                //上传多媒体文件
                builder.addBinaryBody("media", media);
                HttpEntity entity = builder.build();
                httpPost.setEntity(entity);
                // 执行提交
                HttpResponse response = httpClient.execute(httpPost);
                HttpEntity responseEntity = response.getEntity();
                if (responseEntity != null) {
                    result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                }
            }else {
                logger.error("上传失败");
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        logger.info("请求成功:"+result);
    }
}

执行后查看控制台
在这里插入图片描述
返回了一个url查看素材库,并未发现上传为文件在素材库中
在这里插入图片描述

2.新增其他类型永久素材

1.与新增临时素材上传的流程一样,实现上与临时素材的素材格式稍有不同
2.本示例上传视频素材时,请按官方要求修改,传相应参数即可
在这里插入图片描述
不多哔哔

https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE

新增临时素材示例改改

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;

/**
 * @author lvyq
 * @version 1.0
 * @description: 文件上传
 * @date 2022/7/14 10:04
 */
public class mediaUpload {

    private static Logger logger = LoggerFactory.getLogger(mediaUpload.class);

    public static final String ACCESS_TOKEN="xxxxxxxx";
    public static void main(String[] args) throws Exception{
        //本地多媒体文件地址
        String file ="D:\\图片.jpeg";
        curlFileUpload(file,"image");
    }

    /**
     * @description: 模拟curl上传本地文件
     * @author: lvyq
     * @date: 2022/7/14 10:05
     * @version 1.0
     */
    public static void curlFileUpload(String filePath,String type) throws Exception{
        String mediaUploadUrl="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE";
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        try {
            File media = new File(filePath);
            mediaUploadUrl =replaceURLByFile(media,type,mediaUploadUrl);
            if (mediaUploadUrl!=null){
                HttpPost httpPost = new HttpPost(mediaUploadUrl);
                MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                //中文上传乱码
                //builder.setMode(HttpMultipartMode.RFC6532);
                builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                //上传多媒体文件
                builder.addBinaryBody("media", media);
                HttpEntity entity = builder.build();
                httpPost.setEntity(entity);
                // 执行提交
                HttpResponse response = httpClient.execute(httpPost);
                HttpEntity responseEntity = response.getEntity();
                if (responseEntity != null) {
                    result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                }
            }else {
                logger.error("上传失败");
            }

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        logger.info("请求成功:"+result);
    }

 //其它方法省略了,传参考新增临时素材

}

执行

15:04:55.028 [main] INFO mediaUpload - 请求成功:{“media_id”:“oGIlgGzH9Nn056liMjQKx4DVWQcNRDuJrHU4rrxqED0X7OjOdgRzty7LvgzHvaHb”,“url”:“http://mmbiz.qpic.cn/mmbiz_jpg/VaIMNgZtU3TG3icibjYYuHc0hErPSp9yukmODO2mNMFsGSfwWMJib99tXmy3aD4tcfIOuTCCTiaMiciaCaPicDw99n8Gw/0?wx_fmt=jpeg”,“item”:[]}

返回media_id和url,查看素材库
在这里插入图片描述
发现上传的文件名乱码了,不要慌
使用builder.setMode(HttpMultipartMode.RFC6532)
再次上传并查看
在这里插入图片描述
请自行验证!!!

4.获取永久素材

看官网
在这里插入图片描述
获取素材类型不同,返回的内容也不同,请自行查看官网

https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN

新增临时素材示例改改

package com.lvyq.utils.me;

import com.alibaba.fastjson.JSONObject;
import com.tencentcloudapi.mna.v20210119.models.SrcAddressInfo;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.*;
import java.io.*;
import java.net.ConnectException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;

/**
 * @author lvyq
 * @version 1.0
 * @description: 文件上传
 * @date 2022/7/14 10:04
 */
public class mediaUpload {

    private static Logger logger = LoggerFactory.getLogger(mediaUpload.class);

    public static final String ACCESS_TOKEN="xxxxx";
    public static void main(String[] args) throws Exception{
        String MEDIA_ID="oGIlgGzH9Nn056liMjQKx4DVWQcNRDuJrHU4rrxqED0X7OjOdgRzty7LvgzHvaHb";
        String mediaUploadUrl="https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN";
        mediaUploadUrl=  mediaUploadUrl.replace("ACCESS_TOKEN",ACCESS_TOKEN);
        JSONObject mav = new JSONObject();
        mav.put("media_id",MEDIA_ID);
        sendPost(mediaUploadUrl,mav.toJSONString());
    }
    public static void sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";

        try {
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
            out.print(param);
            out.flush();

            String line;
            for(in = new BufferedReader(new InputStreamReader(conn.getInputStream())); (line = in.readLine()) != null; result = result + line) {
            }
        } catch (Exception var16) {
            System.out.println("发送 POST 请求出现异常!" + var16);
            var16.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }

                if (in != null) {
                    in.close();
                }
            } catch (IOException var15) {
                var15.printStackTrace();
            }

        }
        logger.info("result:{}"+result);
    }

}

查看返回的是一个流
在这里插入图片描述

重申!!!此文以图片为例演示,素材不同,返回的数据也不同

5.删除永久素材

https://api.weixin.qq.com/cgi-bin/material/del_material?access_token=ACCESS_TOKEN

获取永久素材改改就行,就不贴代码了,换下url就行
运行结果
在这里插入图片描述
查看素材库
在这里插入图片描述
成功删除!!!

6.获取素材总数

官网说明
在这里插入图片描述

GET https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKEN

获取临时素材示例改改

package com.lvyq.utils.me;

import com.alibaba.fastjson.JSONObject;
import com.tencentcloudapi.mna.v20210119.models.SrcAddressInfo;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.*;
import java.io.*;
import java.net.ConnectException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;

/**
 * @author lvyq
 * @version 1.0
 * @description: 文件上传
 * @date 2022/7/14 10:04
 */
public class mediaUpload {

    private static Logger logger = LoggerFactory.getLogger(mediaUpload.class);

    public static final String ACCESS_TOKEN="xxxxx";
    public static void main(String[] args) throws Exception{
        httpGet();
    }

    public static void httpGet() throws Exception{
       String url="https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKEN";
        url=url.replace("ACCESS_TOKEN",ACCESS_TOKEN);
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        HttpGet httpGet = new HttpGet(url);
                // 执行提交
                HttpResponse response = httpClient.execute(httpGet);
                HttpEntity responseEntity = response.getEntity();
                if (responseEntity != null) {
                    result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                }
        logger.info("请求成功:"+result);
    }

执行结果

16:27:12.020 [main] INFO com.lvyq.utils.me.mediaUpload - 请求成功:{“voice_count”:0,“video_count”:0,“image_count”:2,“news_count”:0}

7.获取素材列表

官网说明
![在这里插入图片描述](https://img-blog.csdnimg.cn/43d4e39945a0498e852e9da3b230ded0.png

POST https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN

获取永久素材示例改改

package com.lvyq.utils.me;

import com.alibaba.fastjson.JSONObject;
import com.tencentcloudapi.mna.v20210119.models.SrcAddressInfo;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.*;
import java.io.*;
import java.net.ConnectException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;

/**
 * @author lvyq
 * @version 1.0
 * @description: 文件上传
 * @date 2022/7/14 10:04
 */
public class mediaUpload {

    private static Logger logger = LoggerFactory.getLogger(mediaUpload.class);

    public static final String ACCESS_TOKEN="xxxxxx";
    public static void main(String[] args) throws Exception{
        String mediaUploadUrl="https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN";
        mediaUploadUrl=  mediaUploadUrl.replace("ACCESS_TOKEN",ACCESS_TOKEN);
        JSONObject mav = new JSONObject();
        mav.put("type","image");
        mav.put("offset",0);
        mav.put("count",20);
        sendPost(mediaUploadUrl,mav.toJSONString());
    }

    public static void sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";

        try {
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
            out.print(param);
            out.flush();

            String line;
            for(in = new BufferedReader(new InputStreamReader(conn.getInputStream())); (line = in.readLine()) != null; result = result + line) {
            }
        } catch (Exception var16) {
            System.out.println("发送 POST 请求出现异常!" + var16);
            var16.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }

                if (in != null) {
                    in.close();
                }
            } catch (IOException var15) {
                var15.printStackTrace();
            }

        }
        logger.info("result:{}"+result);
    }

}

执行结果

16:35:22.614 [main] INFO com.lvyq.utils.me.mediaUpload - result:{}{“item”:[{“media_id”:“oGIlgGzH9Nn056liMjQKx9MKdOreL8nSh9Ye-8n2qfy5z6qfsHYZHCnsFhJcE8VV”,“name”:“图片.jpeg”,“update_time”:1657955287,“url”:“https://mmbiz.qpic.cn/mmbiz_jpg/VaIMNgZtU3TG3icibjYYuHc0hErPSp9yukmODO2mNMFsGSfwWMJib99tXmy3aD4tcfIOuTCCTiaMiciaCaPicDw99n8Gw/0?wx_fmt=jpeg”,“tags”:[]},{“media_id”:“oGIlgGzH9Nn056liMjQKx0d_JL18mla2TPK_W8J15ThlUzGdFqEEql-Xc_ZEWNSV”,“name”:“微信截图_20220528144310.png”,“update_time”:1653720213,“url”:“https://mmbiz.qpic.cn/mmbiz_png/VaIMNgZtU3SsC1oQmm0M21oLia8C8LXZEP5Ggg5kekgErkAy6knR9h7Kou9aM8ATTt88ibjw5dtQY5ev9oiaibRf2w/0?wx_fmt=png”,“tags”:[]}],“total_count”:2,“item_count”:2}

其它:

1.本文以本地文件为例演示,实际开发中需要改为接口供前端使用
2.在实际开发中,一般接收MultipartFile文件类型,使用时将MultipartFile转为File即可

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要喷香水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值