在企业微信上上传音视频会有时长限制,对于较长的音视频,只能分成几段进行上传,然后再进行合并。
主要功能代码
List inputStreamList = new ArrayList<>();
Enumeration en = Collections.enumeration(inputStreamList);
SequenceInputStream seq1 = new SequenceInputStream(en);
详细代码
public void getInputStreamByMediaIds(List mediaIds) {
List inputStreamList = new ArrayList<>();
for (String mediaId : mediaIds) {
// 拉取临时文件
InputStream inputStream = getInputStreamById(mediaId);
if (inputStream != null) {
inputStreamList.add(inputStream);
}
}
if (CollectionUtils.isEmpty(inputStreamList)) {
return null;
}
String fileName = UUIDUtil.getUUID();
String saveFile = "coachweixin/" + fileName + ".mp3";
File file = new File(saveFile);
File parentFile = new File(file.getParent());
if (!parentFile.exists()) {
parentFile.mkdirs();
}
try {
BufferedOutputStream buff = new BufferedOutputStream(new FileOutputStream(saveFile));
Enumeration en = Collections.enumeration(inputStreamList);
SequenceInputStream seq1 = new SequenceInputStream(en);
int i;
while ((i = seq1.read()) != -1) {
buff.write(i);
}
buff.close();
seq1.close();
} catch (Exception e) {
log.error("getInputStreamByMediaIds error", e);
}
}
/**
* 根据文件id下载文件,去微信下载临时素材,返回InputStream
* @param mediaId
* 媒体id
* @throws Exception
*/
public InputStream getInputStreamById(String mediaId) {
InputStream is = null;
String token = getAccessToken();
String url = EnterpriseWechatApi.GET_TEMP_MEDIA + "?access_token=" + token + "&media_id=" + mediaId;
try {
URL urlGet = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlGet
.openConnection();
http.setRequestMethod("GET"); // 必须是get方式请求
http.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
http.connect();
int code = http.getResponseCode();
if (code == 200 || code == 206) {
is = http.getInputStream();
}
// 获取文件转化为byte流
} catch (Exception e) {
log.error("根据文件id下载文件",e);
}
return is;
}