图片素材上传,一直报错:
com.ai.ge.platform.exception.BusinessException: 上传微信异常:{"errcode":45034,"errmsg":"media file count is out of limit hint: [Dfb09762161]"}
媒体文件计数超出限制提示?
提示45034错误代码表示公众号中图片数量超限了
微信公众号素材管理中图片数量已超过官方限制
(官方限制最多5000张)
首先登录到微信公众号,素材管理里面查看一下素材管理里面的图片数量;
如果超过了5000张,删除一部分,将图片数量减少到5000张以下,然后再尝试同步;
具体步骤如下:
一、登录微信公众平台
二、点击公众号左侧导航栏的“素材管理”,点击“图片”,这是我们可以看到当前公众号中的图片数量。
如下图所示全部图片9138张,已经超过了5000张
三、选中图片,然后点击删除,直到删除到5000张以下,如果同步的文章中图片较多话,尽量多删除一些,以防同步是超过限制;
注意:这里删除的图片并不会影响到之前已经群发过的文章!
四、把图片删除到5000张以下的时候,然后再进行同步就可以了。
如下是上传的方法。
/**
* 上传永久素材到微信
*
* 1、最近更新:永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽)。
* 2、公众号的素材库保存总数量有上限:图文消息素材、图片素材上限为5000,其他类型为1000。
* 3、素材的格式大小等要求与公众平台官网一致:
* 图片(image): 2M,支持bmp/png/jpeg/jpg/gif格式
* 语音(voice):2M,播放长度不超过60s,mp3/wma/wav/amr格式
* 视频(video):10MB,支持MP4格式
* 缩略图(thumb):64KB,支持JPG格式
* 4、图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取。
* 5、"上传图文消息内的图片获取URL"接口所上传的图片,不占用公众号的素材库中图片数量的5000个的限制,图片仅支持jpg/png格式,大小必须在1MB以下。
* 6、图文消息支持正文中插入自己帐号和其他公众号已群发文章链接的能力。
*
*/
/**
* 上传永久素材
* @param path
* @param type
* @param title type为video时需要,其他类型设null
* @param introduction type为video时需要,其他类型设null
* @return {"media_id":MEDIA_ID,"url":URL}
*/
public static JSONObject uploadPermanentMaterial(String path, String type, String title,
String introduction,String urlStr) {
JSONObject jsonObject = null;
File file = new File(path);
//判断文件是否
if(!file.exists() || !file.isFile()){
logger.error("上传的文件不存在或不是文件");
return null;
}
try {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager()};
//SSLContext sslContext = SSLContext.getInstance("SSL","IBMJSSE2");
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
logger.info("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
URL uploadURL = new URL(null,urlStr,new sun.net.www.protocol.https.Handler());
HttpURLConnection conn = (HttpURLConnection) uploadURL.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Cache-Control", "no-cache");
String boundary = "-----------------------------" + System.currentTimeMillis();
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
OutputStream output = conn.getOutputStream();
output.write(("--" + boundary + "\r\n").getBytes());
output.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"%s\"\r\n", file.getName()).getBytes());
output.write("Content-Type: video/mp4 \r\n\r\n".getBytes());
byte[] data = new byte[1024];
int len = 0;
FileInputStream input = new FileInputStream(file);
while ((len = input.read(data)) > -1) {
output.write(data, 0, len);
}
/*对类型为video的素材进行特殊处理*/
if ("video".equals(type)) {
output.write(("--" + boundary + "\r\n").getBytes());
output.write("Content-Disposition: form-data; name=\"description\";\r\n\r\n".getBytes());
output.write(String.format("{\"title\":\"%s\", \"introduction\":\"%s\"}", title, introduction).getBytes());
}
output.write(("\r\n--" + boundary + "--\r\n\r\n").getBytes());
output.flush();
output.close();
input.close();
InputStream resp = conn.getInputStream();
StringBuffer sb = new StringBuffer();
while ((len = resp.read(data)) > -1)
sb.append(new String(data, 0, len, "utf-8"));
resp.close();
jsonObject = JSONObject.fromObject(sb.toString());
} catch (Exception e) {
e.printStackTrace();
logger.error("上传媒体文件异常:"+ e);
}
return jsonObject;
}