目前在做一个JavaWeb的开发工作,前端传过来一段文本,JavaWeb作为中间层,将文本转发给下一级服务,接收下一级服务返回的音频流,并返回给前端。
在网上查看了一些人写的文件流接收方法,结果总是报错,于是自己摸索着写了一下,希望能给小伙伴们一个参考。
/**
* 文本转语音请求
*
* @param url
* @param paramMap
* @param textToSpeechResponse
*/
public static void doPostVoiceData(String url,Map<String, String> paramMap,HttpServletResponse textToSpeechResponse) {
// 创建Http实例
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建HttpPost实例
HttpPost httpPost = new HttpPost(url);
// 请求参数配置
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).setConnectionRequestTimeout(10000).build();
httpPost.setConfig(requestConfig);
try {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(java.nio.charset.Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
for(Map.Entry<String, String> entry: paramMap.entrySet()) {
builder.addPart(entry.getKey(),new StringBody(entry.getValue(), ContentType.create("text/plain", Consts.UTF_8)));
}
HttpEntity entity = builder.build();
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);// 执行提交
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
// 设置返回请求Header
String id = response.getHeaders("Id")[0].getValue();
String code = response.getHeaders("Code")[0].getValue();
String message = response.getHeaders("Message")[0].getValue();
textToSpeechResponse.setHeader("Id", id);
textToSpeechResponse.setHeader("Code", code);
textToSpeechResponse.setHeader("Message", message);
OutputStream out = textToSpeechResponse.getOutputStream();
HttpEntity responseEntity = response.getEntity();
InputStream inputStream = responseEntity.getContent();
byte[] buf = new byte[1024];
int count = 0;
while ((count = inputStream.read(buf)) > 0) {
out.write(buf, 0, count);
}
}
} catch (Exception e) {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
logger.error("调用HttpPost失败:"+baos.toString());
} finally {
if (httpClient != null) {
try {
httpClient.close();
} catch (IOException e) {
logger.error("关闭HttpPost连接失败!");
}
}
}
}
返回结果如下图: