api地址:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/kf-mgnt/kf-message/uploadTempMedia.html
小程序客服 /客服消息 /新增图片素材
图片链接地址,没有文件后缀:https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1667994205,255365672&fm=5d
代码:
String token = this.getAccountAccessToken(account);
String uploadMediaUrl = UPLOAD_MEDIA_URL + "?access_token=" + token + "&type=" + type;
// 定义数据分隔符
String boundary = "------------zhiddatauploadfile";
try {
// 根据内容类型判断文件扩展名
String suffix = mediaFileUrl.substring(mediaFileUrl.lastIndexOf(".")+1);
String fileName = "file." + suffix;
URL uploadUrl = new URL(uploadMediaUrl);
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
HttpsURLConnection uploadConn = (HttpsURLConnection) uploadUrl.openConnection();
uploadConn.setDoInput(true);
uploadConn.setDoOutput(true);
uploadConn.setSSLSocketFactory(sc.getSocketFactory());
uploadConn.setHostnameVerifier(new TrustAnyHostnameVerifier());
uploadConn.setRequestMethod("POST");
// 设置请求头Content-Type
uploadConn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
// 获取媒体文件上传的输出流(往微信服务器写数据)
OutputStream outputStream = uploadConn.getOutputStream();
BufferedInputStream bis = null;
HttpsURLConnection httpsMediaConn = null;
boolean error=false ;
URL httpsMediaUrl = new URL(mediaFileUrl);
httpsMediaConn = (HttpsURLConnection) httpsMediaUrl.openConnection();
SSLContext httpsSC = SSLContext.getInstance("SSL");
httpsSC.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
httpsMediaConn.setSSLSocketFactory(httpsSC.getSocketFactory());
httpsMediaConn.setHostnameVerifier(new TrustAnyHostnameVerifier());
httpsMediaConn.setRequestMethod("GET");
int httpRetCode = httpsMediaConn.getResponseCode();
// 如果有重定向
if (httpRetCode == 301 || httpRetCode == 302 || httpRetCode == 303) {
String redictURL = httpsMediaConn.getHeaderField("Location");
URL redirectUrl = new URL(redictURL);
SSLContext redirect = SSLContext.getInstance("SSL");
redirect.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
HttpsURLConnection redirectConn = (HttpsURLConnection) redirectUrl.openConnection();
redirectConn.setSSLSocketFactory(redirect.getSocketFactory());
redirectConn.setHostnameVerifier(new TrustAnyHostnameVerifier());
redirectConn.setRequestMethod("GET");
// 从请求头中获取内容类型
String contentType = redirectConn.getHeaderField("Content-Type");
// 请求体开始
outputStream.write(("--" + boundary + "\r\n").getBytes("utf-8"));
outputStream.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"%s\"\r\n", fileName).getBytes());
outputStream.write(String.format("Content-Type: %s\r\n\r\n", contentType).getBytes());
// 获取媒体文件的输入流(读取文件)
bis = new BufferedInputStream(redirectConn.getInputStream());
byte[] buf = new byte[8096];
int size = 0;
while ((size = bis.read(buf)) != -1) {
// 将媒体文件写到输出流(往微信服务器写数据)
outputStream.write(buf, 0, size);
}
// 请求体结束
outputStream.write(("\r\n--" + boundary + "--\r\n").getBytes());
outputStream.close();
bis.close();
// 获取媒体文件上传的输入流(从微信服务器读数据)
InputStream inputStream = uploadConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuffer buffer = new StringBuffer();
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
uploadConn.disconnect();
// 解析返回结果
JsonNode jsonNode = JsonUtil.getObjectMapper().readTree(buffer.toString());
// 测试打印结果
logger.info("[uploadFile] weixin return:" + jsonNode + "," + uploadMediaUrl);

加上后缀试试呗
获取这个接口调用响应时 获取到的结果为:
40004invalid media type不合法的媒体文件类型
是不是因为没有文件名称后缀
outputStream.write(String.format("Content-Disposition: form-data; name=\"media\"; filename=\"%s\"\r\n", fileName).getBytes()); filename=com/6ONXsjip0QIZ8tyhnq/it/u=1667994205,255365672&fm=5d