/**
* 上传临时素材--群发消息
* https://developer.work.weixin.qq.com/document/path/90253
* 素材上传得到media_id,该media_id仅三天内有效
* media_id在同一企业内应用之间可以共享
* 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file)
* @param file
* @return
*/
@Override
public WeChatUploadAttachmentResponse uploadMsg(MultipartFile file) {
//获取accesstoken
String accessToken = getAccessToken();
if (StringUtils.isNotEmpty(accessToken)) {
//获取原始上传文件名称
String filename = file.getOriginalFilename();
//获取后缀 'jpg','JPG','png','PNG','mp4','MP4'
//,'amr','AMR','txt','pdf','PDF','xlx','xlxs','doc','docx'
int i = filename.lastIndexOf(".");
String substring = filename.substring(i + 1);
String mediaType = "";
if ("jpg".equals(substring) || "JPG".equals(substring) || "png".equals(substring) || "PNG".equals(substring)) {
mediaType = "image";
}else if ("mp4".equals(substring) || "MP4".equals(substring)) {
mediaType = "video";
}else if ("amr".equals(substring) || "AMR".equals(substring)) {
mediaType = "voice";
}else {
mediaType = "file";
}
//上传临时素材接口地址
String url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token="+accessToken+
"&type="+mediaType;
//设置请求头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
File file1 = null;
try {
//设置文件大小
int length = file.getBytes().length;
headers.setContentLength(length);
//设置请求包Content-Disposition form-data中媒体文件标识
ContentDisposition contentDisposition =
ContentDisposition.builder("form-data").filename(filename).name("media").build();
headers.setContentDisposition(contentDisposition);
//MultipartFile 转 File
file1 = toFile(file);
//获取FileSystemResource
FileSystemResource resource = new FileSystemResource(file1);
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("media", resource);
//设置请求包
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
//post调用企业微信上传临时素材接口
ResponseEntity<String> post = RestUtils.post(url,requestEntity,String.class);
if (Objects.nonNull(post)) {
//获取返回值
String body = post.getBody();
WeChatUploadAttachmentResponse res = JSON.parseObject(body, WeChatUploadAttachmentResponse.class);
return res;
}
}catch (Exception e) {
e.printStackTrace();
}finally {
if (file1 != null) {
file1.delete();
}
}
}
return null;
}
//MultipartFile 转 File
private File toFile(MultipartFile multipartFile) {
//文件上传前的名称
String fileName = multipartFile.getOriginalFilename();
File file = new File(fileName);
OutputStream out = null;
try{
//获取文件流,以文件流的方式输出到新文件
out = new FileOutputStream(file);
byte[] ss = multipartFile.getBytes();
for(int i = 0; i < ss.length; i++){
out.write(ss[i]);
}
return file;
}catch(IOException e){
e.printStackTrace();
return null;
}finally {
if (out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
评论