在企业微信上上传音视频会有时长限制,对于较长的音视频,只能分成几段进行上传,然后再进行合并。 主要功能代码 List<InputStream> inputStreamList = new ArrayList<>(); Enumeration<InputStream> en = Collections.enumeration(inputStreamList); SequenceInputStream seq1 = new SequenceInputStream(en); 详细代码 public void getInputStreamByMediaIds(List<String> mediaIds) { List<InputStream> 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<InputStream> 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; }